PHPの最近のブログ記事

CakePHPで配列で指定したinputに$this->dataが連動してくれる
helperのありがたい機能を使っていたのですが、
<?php echo $form->input("Part.1.element.1.radio", array('type'=>'text')); ?>
という感じの5層構造になるとデータの引継ぎをしてくれません。
helperの対応しているのは4層までみたいです。

困ったということで調べてみるのですが、これという記事が見つからないので
自分でカスタマイズして5層でもデータがやり取りできるようにしました。

wdCalenderをローカル環境で動かしていて、実際本番環境にUPした時に動かなくなってテンパッタのでメモとしてブログに残しておきます。

症状としてはテスト環境では動くのに本番環境では動かないというもの。
jqueryに頼っているので実際動かないと、どう調査をしたらいいか分からずとりあえず、FireBugで追っかけていきます。
するとどうもテストでは値が入っている所に、本番では入っていないということが分かりました。しかもJSON形式のデータが・・・

JSON形式のデータ???んっ!!以前phpのjson_encodeはphpのバージョンに依存するなというのに、はまった事があるなということで調べるとビンゴでJSONが使えるPHPのバージョンは5.2以上ということ。
本番サーバーではphpのバージョンが5.1.6だったので早速5.1.6でもJSONが使えるように「http://www.softel.co.jp/blogs/tech/archives/973」を参考にサーバーの設定を変更!!
これで動くかなと思っていたのですが動かない・・・という事でもう一度デバッグ作業をしていきます。
今度はphpの記述部分をfwrite関数を使っていって1行ずつファイルにデバッグ文を出力して追って行きます。するとある関数で処理が止まってしまっている事が分かりました。
それはdate_parse関数なのですが調べてみると、この関数が使えるのはphp5.2以上との事でして、JSONと一緒やんという顛末でした。date_parse関数のところを独自の記述に置き換えると見事動いてくれました。

基本としてwdCalenderはphp5.2以上で使うもの。それ以前で使うときは動くように自分で調整をして上げる必要ありという事でした。

今回レンタルサーバーの区画のMySQLに大量データを流し込まなくなったのですが、レンタルサーバーが用意してくれているphpMyAdminでは容量が大きくてインポートが出来ませんでした。
自社で管理しているサーバーであればコマンド一発で難なく出来るのですが、レンタルサーバーなものでコマンドも使えない、php.iniの値も変えれないということでどうした物かという状況になりました。
困ってググッてみたらBigDumpという便利そうなものを発見!!
詳しくはhttp://d.hatena.ne.jp/istwar/20101019/1287505139を見てもらった方が早いので説明は書かないですけど、とにかくPHPファイル1つでインポートが出来ちゃうのでどんなサーバー相手でもへっちゃらというのは素晴らしい!!
すごい重宝するので皆さんも是非使ってみてください。
この前、閲覧、印刷のみできるPDFて作れる?
という需要があったので色々と調査してみた。(しかもPHP4で)

最初はTCPDF無理やと思って、FPDFとかで試していたのですが、
実はPDF4バージョンもあることがわかった。


今回は、
PDFで「印刷禁止」「文字等コピー禁止」「編集禁止」「パスワード」「有効期限」「ローカルPCで開くの禁止」を
テストしてみました。
DBに保存する時に個人情報をそのまま保存するのは、万が一DBの情報が流出した時にまずいので、色々と調べてみました。

まず、パスワードはphpのmd5でハッシュ化して保存すれば、復号できないのでOK、パスワードを忘れた場合は、新しいパスワードをランダム生成。

次に、暗号・復号するデータ。
氏名やメールアドレスなど、
php側で暗号・復号する方法と、DB側で暗号・復号する方法があります。(ハードディスク自体暗号の方法もありますが)
で、問題は、LIKE検索とINDEXでした。
基本、暗号化して保存すると上記2点が出来なくなることが問題です。

その点も踏まえてどんな方法があるか調査してみました。

とりあえず今回は
php mysqlの環境で出来ればということで・・・
画像をアップするシステムを作ってる時にかなり邪魔なブラウザの画像のキャッシュ。
画像をアップしなおしたのにブラウザで確認すると前の画像が!!
そんな時の解決方法をまとめてみました。

テストしたのは
IE6,8
Firefox4
Chrome11

テストファイルはphpです。
今回phpコードを暗号化する方法を検討することになり、いろいろ試してみたので、その経過を記していきます。

まず最初にPOBSというプログラムが比較的簡単に導入できそうなので試してみました。
http://pobs.mywalhalla.net/からPOBSのダウンロードしてきます。
最新版のpobs099.zipをダウンロードして展開した出来たフォルダをphpが動作する区画にアップロードします。
後はブラウザから中に入っているpobs.phpを叩くだけで使えるということだったのですが、動かない!!
画面が崩れてコードの表示がむき出しになっている状態でした。
調べてみるとPHPを開始するところの記述が「<?」だけになっていました。
サーバーの設定にもよるのですが「<?php」で始めないと動かないようになります。
今回試した環境では動かなく原因を特定するのにハマリました・・・

無事に画面が表示されたので実際に実行してみます。
「Source Directory」に暗号化したいphpのあるパスを記述して、「Target Directory」に暗号化し終わったファイルを置くパスを指定します。
後は自由に設定が出来てクラス名・関数名・変数という具合に指定できます。
準備が出来たら「Start processing」を押すとどのファイルを変更したかと、変更前の記述と変更後の記述が表示されます。
それで「Target Directory」で指定したフォルダを見てみると、変換されたファイルが出来ていました。

感想:POBSはphpソースの暗号化というより可読性を落とすという感じで、今回捜し求めているphpの暗号化には当てはまらなそうです。ただ導入も簡単なので将来役に立つかも・・・


次に試してみたのがPHP_SCREWという暗号化ツールです。
導入と使い方は次のページを参考にしていきました。
http://www.pm9.com/newpm9/itbiz/php/phpscrew/ (本家)
http://tm.root-n.com/programming:php:etc:php_screw
基本的にLinuxにインストールしてコマンドでソースの暗号化をするというツールです。
コマンドで実行したら指定したファイルが暗号化されて、同じ場所に「元ファイル名+.screw」のファイルが出来ます。
後は「元ファイル名+.screw」のファイルを消せば暗号化の完成!!

感想:ソースの暗号化という分に関してはある程度望んでいる感じだった。しかし暗号化したPHPはインストールしたサーバーでしか動かないのでレンタルサーバーで動かすときやパッケージで提供するときには使えなさそう。
以前紹介した記事「wdCalendarを日本語で使ってみる」で日本語化したwdCalendarをCakePHPに組み込んでみたので紹介します。

それから少し改造ということで、登録できるフィールドを追加してみるのと、ログインした人のidを基に誰が登録した予定なのかを持たせるようにしました。

実際の見た目はコチラ
GoogleカレンダーをベースにJQueryで作られたwdCalendarを日本語にして使ってみたのでそのメモ書きです。

wdCalendarはhttp://plugins.jquery.com/project/wdCalendarからダウンロードしてきます。

今回はダウンロードしてきたファイルで分かるところを日本語に変えていきました。これで一応見た目は全て日本語になったはずです。

ダウンロードしたjsファイルだと日本語に対応していないのでwdCalendar_lang_○○.jsとdatepicker_lang_○○.jsなっているフォイルを改造してwdCalendar_lang_JA.jsとdatepicker_lang_JA.jsを作りました。ソースはこんな感じです。
この前TCPDFというPHPからPDFを出力するライブラリではまったのでメモ。
TCPDFとはこちら
こちらのサイトを参考にしてファイルのサイズの関係でフォントを埋め込まないようにして PDFを出力していたんですが、「半角(¥)がバックスラッシュ(\)」になって出力されてしまいました。
何で・・・?