Jaybanuan's Blog

どうせまた調べるハメになることをメモしていくブログ

PHPのデバッグ

PHPは殆ど触れたことがないが、諸事情でデバッグすることになった。 PHPに標準的なログ出力の機能があるのかどうか(そして当該Webアプリで使っているのかどうか)は、よく分からない。 とにかく、エラーが発生したコンテキストが分かればいい。

デバッグ対象のWebアプリはExceptionを握りつぶすような実装になっているので、catch句のところにfile_put_contents()の呼び出しを加えて、例外の情報を独自にファイル出力するようにした。

catch(Exception $e) {
    file_put_contents('/tmp/log.txt', $e, FILE_APPEND | LOCK_EX);
}

systemdの管理下にあるApache HTTPDでファイル出力したためか、ログは/tmp/log.txtには出力されず、/tmp/systemd-private-f7be22cd34b84aeea9431ded8ca53541-php-fpm.service-8WLt2f/tmp/log.txtというファイルに出力されていた。 このファイルの内容を確認して、何とか原因の特定に成功した。

ちなみに、Exceptionには__toString()というメソッドが定義されていて、これはJavaでいうtoString()Pythonでいう__str__()にあたるもののように見えた。 なので、文字列が期待される場所で例外を引き渡すと、自動的に文字列化してくれるのではと推測する。

参考

www.php.net

www.php.net

www.php.net