PHPのデバッグ方法 
またまたチョコボールです。
趣味で運営してるサイトはロリポップサーバーを利用してますが、
割と最近PHPがバージョンアップしてPHP5に切り替え可能になりました。
自動的にPHP5になるのかと思ってひやひやしていましたが、管理画面から切り替え可能という形でした。
そりゃそうですよね。。
で、近日、切り替え作業をしようと思ってます。
仕事での開発環境はPHP5なので当たり前のように使っていたfile_put_contents関数ですが、PHP4で使えなくてマジっすかと思った記憶があります。
PHP4ではfopenしてfwriteしてfcloseする必要があります。
ということでfile_put_contents関数等を使ったデバッグ方法を。。
コーディング中、最も簡単なデバッグ方法は
echo $data;
とか
echo "<pre>"; print_r($data); echo "</pre>";
とか
echo "<pre>"; var_dump($data); echo "</pre>";
ですかね。。
それ以降の処理をストップしてデバッグしたければ直後に
exit;
なんかを書けばいいと思います。
ただ、画面では表示されない処理のデバッグをしたい時やデバッグ内容やエラーログをテキストに記録したりしたい時があるので下記のような関数を作って使ってます。
■画面にデバッグ表示
function _debug($str, $showHtml = false){
echo "<pre>\n";
$ret = print_r($str, true);
if($showHtml){
$ret = str_replace('< ', '<', '>', $ret));
}
echo $ret."\n";
echo "</pre>\n";
}
$strに<hr />などのHTML的に特殊な意味をもつ文字列が入っていた場合、デバッグ内容がうまく表示されないので、
そのような時は第二引数にtrueを入れてやると特殊文字をHTMLエンティティに変換して表示させます。
■ファイルに追記してデバッグ
function _log($str, $type = 'debug', $file_name = null){
if(is_null($file_name)){
$file_name = LOG_DIR.'/'.$type.'_'.date('Ymd').'.log';
}
$data = date('Y/m/d H:i:s').' '.print_r($str, true). "\r\n";
file_put_contents($file_name, $data, FILE_APPEND | LOCK_EX);
}
※LOG_DIR→ログが出力されるディレクトリのパスの定数
上記で日ごとにログが取れます。
ただ、このままですと直接ファイルにアクセスされかねないので、
http://labs.pakureserve.jp/archives/90
のように
.htaccess
を利用して指定拡張子をアクセス出来ないようにしたりの工夫が必要ですね。
次は、弊社システム開発部、のびーにょサブマネージャーから教えてもらったデバッグ方法です。
mail(’【デバッグを受け取りたいメールアドレス】’, __FILE__.’:’.__LINE__, print_r(【変数や配列等】, true));
これはすごく便利。。。
削除し忘れて放置するとメールボックスがすごいことになりかねませんので要注意です。笑
明日、弊社、設立3年目になるようです。
今後とも宜しくお願い致します。