人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPのFATALエラーをapacheのログまたは、指定したファイルへ出力する方法を教えてください!

目的は、PHPプログラムの実行中にクリティカルなエラーが発生したことをswatch経由で取得するためです。

現在のログ周りのphp.iniを以下に記載します。

error_reporting = E_ALL & ~E_NOTICE
display_errors = Off
log_errors = On



1270546455
●拡大する


●質問者: まつぼっくり
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:Apache ON PHP SWATCH エラー
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● GreenStar
●65ポイント

error_reporting = E_ALL & ~E_NOTICE

E_ALL(ただしE_NOTICEは除く)という設定なので致命的エラーはerror_log(access_logとは別ファイル)に出力されてるはずです。

http://php.net/manual/ja/function.error-reporting.php


エラーログの出力先を変えたい場合はphp.iniにて下記の設定を行いますがサーバ全体に影響しますのでレンタルサーバ(占有/VBSで管理者権限を有している場合は除く)であれば無理かもしれません。詳しくはサーバ管理者に相談してくださいね。

error_log = "ディレクトリ/ファイル名"
◎質問者からの返答

質問がクリアではなくてすいません。クラスIDが見つからなかったときには、E_ERRORレベルのエラーが発生するはずです。そしたら、上記の設定ではapacheのエラーログに出力されると思っていましたが、出力されていません。


2 ● ホーエンハイム
●5ポイント

エラーハンドラを置き換えることで対応可能です。

下記のスクリプトをプログラム冒頭に組み込み、"エラーログファイル名" に出力したいファイル名を記述してください。そのファイルにエラーログを追記します。

//新しいエラーハンドラ
function myErrorHandler($errno, $errmsg, $filename, $linenum) {
 $msg = sprintf("PHP error %d: %s in file %s on line %d\n", $errno, $errmsg, $filenam e, $linenum);
 echo $msg;
 file_put_contents(エラーログファイル名, $meg, FILE_APPEND);
}
//エラーハンドラの置換
$old_error_handler = set_error_handler('myErrorHandler');
◎質問者からの返答

E_ERRORレベルのエラーが発生したらプログラムの実行は直ちに行われなくなるのでエラーハンドラの置き換えをしても補足できないはずです。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ