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

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

回答の条件
  • 1人5回まで
  • 登録:2010/02/09 16:33:50
  • 終了:2010/02/10 16:23:39

ベストアンサー

id:b-wind No.4

b-wind回答回数3344ベストアンサー獲得回数4402010/02/10 00:19:26

ポイント22pt

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

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

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

PHP: 実行時設定 - Manual

PHP: 実行時設定 - Manual

PHP: 実行時設定 - Manual

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


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

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

ini_set('display_errors','On');

を実行すればいい。

id:ko-takada

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

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

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

2010/02/10 16:23:23

その他の回答(3件)

id:horonict No.1

horonict回答回数257ベストアンサー獲得回数512010/02/09 16:46:32

ポイント23pt

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

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

function myErrorHandler($errno, $errmsg, $filename, $linenum, $vars) {
    exit(1);
}
id:ko-takada

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

2010/02/10 12:16:11
id:b-wind No.2

b-wind回答回数3344ベストアンサー獲得回数4402010/02/09 16:56:52

ポイント23pt

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

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


基本は、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

id:ko-takada

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

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

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

2010/02/09 20:18:18
id:e55ind No.3

e55ind回答回数162ベストアンサー獲得回数42010/02/09 21:57:44

ポイント22pt

Log4php

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

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

id:ko-takada

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

2010/02/10 12:15:48
id:b-wind No.4

b-wind回答回数3344ベストアンサー獲得回数4402010/02/10 00:19:26ここでベストアンサー

ポイント22pt

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

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

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

PHP: 実行時設定 - Manual

PHP: 実行時設定 - Manual

PHP: 実行時設定 - Manual

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


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

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

ini_set('display_errors','On');

を実行すればいい。

id:ko-takada

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

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

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

2010/02/10 16:23:23

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません