【php】phpでデバッグする方法
問題
phpでデバッグするのどうやったらよい?
答え
phpはコンパイルなどの工程がないので、即実行して画面で確認することになる場合が多い。
echo
画面に表示したかったら echoが基本。
echo $a;
代入した値を見たかったら、代入の式の前にechoと書けば、その値が表示できる。
echo $str = '何か文字列を代入しています' . date('Y-m-d H:i:s') . ' 日付を入れてみたりしています';
var_dump
echoだと、NULLも空文字として表示されるなど、正確な情報が得られない場合があるが、var_dump関数なら、詳細に出力してくれる。
$a = array(1, 2, array("a", "b", "c")); var_dump($a);
↓
array(3) { [0]=> int(1) [1]=> int(2) [2]=> array(3) { [0]=> string(1) "a" [1]=> string(1) "b" [2]=> string(1) "c" } }
var_export
var_dumpだと、なんとなく見づらいとき、文字列として取得したいとき、そのままコピー&ペーストしてどこかで使いたいときには、var_exportが便利。
$a = array(1, 2, array("a", "b", "c")); var_dump($a);
↓
array ( 0 => 1, 1 => 2, 2 => array ( 0 => 'a', 1 => 'b', 2 => 'c', ), )
SQLのエラー
SQLのエラーはプログラムのエラーではないので、SQLのエラーが発生しても、基本的にプログラムは何も教えてくれない。
SQLのエラー発生時にエラーログに残るようにするか、以下のように都度エラーを表示させて確認する。
var_dump($pdo->errorInfo()); //PDOを使っているとき
var_dump($stmt->errorInfo()); //PDOを使っているとき
echo mysql_error(); //mysql関数を使っているとき
エラーログ
特に変わった設定をしていなければ、エラーはエラーログに出力されているはず。
どこに出力されているかは、php.iniを見るか、phpinfoなどで確認するとよい。
error_log => /var/log/php/php_error.log のようになっていたら、実行しているサーバーの /var/log/php/php_error.log というファイルに出力されているので、それを見るとよい。
error_log => no value のようになっていたら、Webサーバー(Apache)のエラーログ(/var/log/httpd/error_log など)に出力されているでしょう。
コメント