【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 など)に出力されているでしょう。