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

PHPのFatalやWarning等のエラーメッセージを画面には出したくないが、Apacheのエラーログには記録したいです。
ただし、各アプリケーションのデバッグモード時には画面に出力したいと思います。
こういった要望を実現するには、PHPをどのように設定すれば良いでしょうか?

php.ini にて以下のように設定し、各アプリケーションにてデバッグモード時以外は「error_reporting(0);」と設定したところ、エラーが記録されません。
log_errors = On
error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT
display_errors = On

環境:CentOS 5.4 x64 + Apache 2.2 + PHP 5.2.12

解決方法をご存じの方、教えて頂けると幸いです。

●質問者: ko-takada
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:Apache CentOS ON PHP Warning
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● horonict
●23ポイント

以下のようなエラーハンドラ関数を用意すれば、変数 $RELEASE が存在するとき(リリース時)にはエラー出力せずに強制終了するようになります。

error_reporting(E_ALL);
if (isset($RELEASE)) $old_error_handler = set_error_handler("myErrorHandler");

function myErrorHandler($errno, $errmsg, $filename, $linenum, $vars) {
 exit(1);
}
◎質問者からの返答

すみません、特に関数を追加せずに簡単な対応をしたいと思っております。


2 ● b-wind
●23ポイント

各アプリケーションのデバッグモード時には画面に出力したいと思います。

デバッグモード時ってどう言う状態を指すの?


基本は、php.ini では画面出力を抑制する。

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

デバッグ時には .httacces やら PHP プログラムで display_errors を On に変えるだけ。

ini_set('display_errors','On');

PHP: ini_set - Manual

または

php_flag display_errors on

PHP: 設定を変更するには - Manual

◎質問者からの返答

> デバッグモード時ってどう言う状態を指すの?

デバッグが有効となるプロクシからの接続の場合です。

リリース状態で発生したエラーを画面には出さずにApacheのエラーログに記録したいのですが、その方法を教えて頂けませんでしょうか。


3 ● e55ind
●22ポイント

Log4php

http://www.doyouphp.jp/tips/tips_log4php.shtml

をつかってまじめに実装するしかないのでは?

◎質問者からの返答

皆さんに出して頂いた案を組み合わせて、実現出来そうです。ありがとうございます。


4 ● b-wind
●22ポイント ベストアンサー

リリース状態で発生したエラーを画面には出さずにApacheのエラーログに記録したいのですが、その方法を教えて頂けませんでしょうか。

先の回答に書いた内容を php.ini に設定すればそうなるはずだけど?

display_errors = Off 時のエラー出力先は標準では Apache のエラーログのはず。

PHP: 実行時設定 - Manual

PHP: 実行時設定 - Manual

PHP: 実行時設定 - Manual

出力されないのなら、アプリケーションのどこかで設定変更してるかもしれない。


デバッグが有効となるプロクシからの接続の場合です。

ならそのプロキシからの接続かどうか判定して、OKの場合のみ

ini_set('display_errors','On');

を実行すればいい。

◎質問者からの返答

補足ありがとうございます。

■サーバ側では以下のように設定

log_errors = On

error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT

display_errors = Off


■.htaccessまたはhttpd.confでエラーメッセージを出したい接続もとからの場合には

php_value display_errors On

を追加する、という形で全くスクリプトに手を加えずに実装出来そうです。

もし追加できない場合にはPHPにて共通で読まれているスクリプトに開発環境からの接続であればini_set("display_errors","ON");という値をセットします。

ありがとうございました。


追記:以下のページにて、htacess内で条件分岐してphp_valueを設定する方法を質問させて頂きました。

http://q.hatena.ne.jp/1265777397

関連質問


●質問をもっと探す●



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