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__()
にあたるもののように見えた。
なので、文字列が期待される場所で例外を引き渡すと、自動的に文字列化してくれるのではと推測する。