SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 採用情報 ...
技術者募集中

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

関連するメモ

コメント