SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 社員募集 ...

【php】どうやってデバッグしますか?

うまく動かないとき、動作を確認するとき、デバッグの方法は人それぞれ、場合によりけり。

よくある確認方法はこんなところでしょうか。

よくあるデバッグ、動作確認方法

echo

「画面に出してみる」の代表ですね。

echo $sql;

var_dump()

こちらも「画面に出してみる」系の方法。echoだと空文字なのか、NULLなのか、失敗したのか判断がつきませんが、var_dump()だとNULLなどちゃんと出してくれます。

var_dump($data);

関数の実行結果を詳細に見ることもできます。

var_dump(test(1, 2, 'var_dump()には関数の実行結果を渡すこともできるのだ!'));

error_log(), file_put_contents()

時には画面に出せないこともあります。処理後に完了画面にリダイレクトする場合、使用しているフレームワークの特性で途中でechoしても捨てられる場合など。

そんなときはファイルに書き出しましょう。file_put_contents() または、古いphpでは error_log() などの関数で希望のファイルに書き込みができます。

よくあるのが、file_put_contents('error.log'); などしても、どこに書き出されるのかわからないといった問題。そのときは、__FILE__というマジック定数が使えます。

file_put_contents(dirname(__FILE__) . '/error.log', $debug, FILE_APPEND);

__FILE__ はそのスクリプトファイルのフルパス、dirname(__FILE__) はそのスクリプトファイルがあるディレクトリ(絶対パス)になります。絶対パスでログを書き出すファイルを指定できるので、どこか意図しない場所に書き出されることはありません。

この例だと、該当のスクリプトと同じディレクトリの中の error.log というファイルに追記で書き出します。

エラーログ

phpのエラーが書き出されるログファイルがあります。

ログファイルは php_info() などで確認できます。設定のlog_errorsがOnになっていれば、設定のerror_log で指定されたファイルにログが書き出されます。error_logに指定がないときは、Webサーバのエラーログなど実行方法に応じた場所に書き出されます。

プログラムを触らないで、何か異常がないか見るだけで確認できるので、調査の手始めにはここから入ったりします。

自分が作ったものや、ログ機能のあるフレームワークを使っているときにはあまり困らないところですが、たまにはよくわからないものを触らないといけないこともあるものです。

関連するメモ

コメント