PHPのエラー処理やログ出力
try, chach でエラーを捕捉できる。Javaとほぼ同じだ。ExceptionもErrorもThrowableインターフェースを実装しているところもJavaと同じ。(Exceptionに関してはPHP7から実装した模様)
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
</head>
<body>
<?php
try {
header('Content-Type: text/html; charset=utf-8');
if (checkDir("foobar")) {
echo "Success\n";
} else {
echo "Fail\n";
}
} catch(Exception $e) {
echo "Exception発生[" . $e->getMessage() . "] (\n" . $e . "\n)\n";
} catch(Error $e) {
echo "Error発生[" . $e->getMessage() . "] (\n" . $e . "\n)\n";
}
function checkDir($dir) {
if ($dir == NULL) {
throw new Exception("dir is null");
}
if (!is_dir($dir)) {
throw new Exception("invalid dir");
}
return true;
}
?>
</body>
</html>
php.iniで指定できるログ出力設定のうち、代表的なものについて調べた。
■error_reporting
出力したいエラーレベル名を"&"でつなげて列挙する。
除外したいレベル名の前には"~"を付ける。
指定可能なエラーレベルは、php.ini内のコメントを参照。
開発中は、有用な情報が得られるため E_ALL を指定すべき。
error_reporting=E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT
■display_errors
On または Off または stderrを指定する。
On : エラーメッセージを標準出力に出す。
標準出力に出すということは、つまりブラウザに出力されるということ。
開発時は、Onにした方がエラーにすぐ気づき便利な場合が多いので推奨。
Off: 標準出力に出力していたメッセージを抑止する。つまり、もともと
標準エラー出力に出していたメッセージは、そのまま出続ける(error_log
の設定がない場合などにはstderrに出力されるが、これまで抑止される
ものではない)。
ブラウザを操作しているエンドユーザにエラーメッセージを見せても
しょうがない、しかも情報漏洩につながる恐れがあるため、本番環境
では絶対にOffにすること。
エラーメッセージは、Apacheのerror.logには常に出ているので、
error.logをログ監視ソフト等で監視すれば良い話であり、標準出力に
出す必要はない。
stderr: エラーメッセージを(標準出力ではなく)標準エラー出力に出す。
これは、CGIとCLIインタフェース使用時にのみ有効。Webモードの場合は
Onと同等。
なお、log_errors, およびerror_logの設定により、stderrに出力する
機能もあるが、display_errors=stderrの機能とは別物である。よって
それぞれの設定でstderrに出力することになった場合は、同様のメッセージ
が2つ標準エラー出力に出ることもある。
■log_errors
On または Off で指定する。
エラーメッセージを下記のerror_logで指定した場所に記録するかどうか。
Onを指定したが下記のerror_logの指定がない場合は、次のとおり。
Webアクセスの場合 : apacheのerror.logに出力する。
phpコマンド(CLI)の場合 : stderrに出力する。
■error_log
エラーメッセージの出力先ファイル名を絶対パスで書く。syslogと書くと
linuxの場合はsyslogに出力、Windowsの場合はイベントログに出力する。
---------------------------------------
■ITとことんのトップページ
┗■PHPのトップページ
┗■本ページ