質問: 現在PHPのアプリを作成しています ほぼ完成し、リリースに向けて調整中なのですが PHPで発生したスクリプトエラーをIISのInternal Server Errorとして引き渡すことは出来ないでしょうか ``` ``` としたときに、画面上に ``` Parse error: syntax error, unexpected 'try' (T_TRY) in C:\inetpub\wwwroot\AAAAA\BBBBB.php on line 3 ``` と表示されます(例として極端すぎるかもしれませんが) これを、この様なPHPのエラーでは無く IISで表示する一般的なエラー画面を表示したいと思っています PHPのログは ``` [25-Aug-2015 11:51:25 Asia/Tokyo] PHP Parse error: syntax error, unexpected 'try' (T_TRY) in C:\inetpub\wwwroot\AAAAA\BBBB.php on line 3 ``` IISのログは ``` 2015-08-25 02:48:43 POST /AAAAA/BBBBB.php - - 127.0.0.1 Mozilla/5.0+(Windows+NT+6.1;+WOW64;+rv:40.0)+Gecko/20100101+Firefox/40.0 http://localhost/AAAAA/ 200 0 343 ``` となっており、どうもIIS側は正常終了になってしまっているようです 出来ればIISにもエラーとして通知したいのですがphp.iniの設定などはどこをいじればいいのでしょう
回答: もしHTTP`200`をHTTP`500`に替えたかったら、`display_errors`が`Off`または`0`にしよう。 `display_errors=On`または`display_errors=1`であれば、たとえ`E_PARSE`や`E_ERROR` でも、PHPエンジンはHTTP`200`を出力する。 もしIISのログにPHPのエラーが見えるようになりたかったら、`error_log`を使おう。例えば`php.ini`こうすると: ``` error_log=syslog log_errors=1 error_reporting=-1;全部 log_errors_max_len=0;『無限』 ``` エラーがシステムロガー(`syslog`と同じ目的地)に渡す: !画像の説明をここに入力 参考によると、`error_log`設定しなければ、ログは自動的にIISのとこへ行く: > > このディレクティブが設定されていない場合、エラーは SAPI エラーロガーに送信されます。これは、例えば Apache のエラーログ、 あるいは CLI なら stderr になります。 > > > そう書いてあるけど、なんだかどうしてもダメになるしかない。(エラーメッセージがIISのログに表示されず、ブラウザで見える。多分web.config.aspx)どこか間違ったんのせいだ(英語のリンク)。) 「`error_log`設定しない場合」について指示実行しなかったら、直接に設定すればいい。まずサイトログの場所を見つけ: !画像の説明をここに入力 、`php.ini`を設定する。例: ``` error_log="C:\inetpub\logs\LogFiles\W3SVC1\u_in150828.log" ``` (注意、一つのサーバーには複数のサイトを持つことでもある 。各サイトには独自のログがある。) 次、`iisreset`で再起動する、または: ``` net stop w3svc net start w3svc ``` 最後に**書き込みと読み込み**の許可、選択したユーザーに与える: !画像の説明をここに入力 そのユーザーはほとんど`IIS_IUSRS`です。(`IUSR`って主張する意見を聞いたことがあるけど、それでしてみた結果は成し遂げられない。でもそちらの場合が成し遂げられるかもしれない。)「認証.aspx)」使えば、認証されたユーザー(英語のリンク)です。