- ベストアンサー
PHPでFetalなエラーが発生した場合、ApacheのErrorDocument 500で設定したメッセージが表示されない
- 質問者はPHPでFetalなエラーが発生した場合に、ApacheのErrorDocument 500で指定したメッセージが表示されない問題に直面しています。
- 質問者はApacheの設定とPHPの設定を確認しましたが、解決策が見つかりませんでした。
- 質問者は、どのようにすればErrorDocument 500で設定したメッセージが表示されるかを知りたいとしています。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#Ano2追記です。 関数register_shutdown_function()とtry-catch で、致命的エラー後も処理を継続する例がありますね。参考になるかも知れません。 http://keicode.com/cgi/php-error-handling.php
その他の回答 (2)
- JaneDue
- ベストアンサー率75% (263/350)
>PHPはE_ERROR, E_PARSEなどのエラーが発生したら画面が真っ白(orエラー文)になるしかない。 その通りだと。それを利用した1例としては、 display_errorsをOffにして //http経由で結果取得 if($line=file_get_contents("http://監視するPHP")){ echo $line; }else{ //ErrorDocument はファイルにして自力で出力 //header('HTTP/1.0 500 Internal Server Error'); include("500Error用.php"); } またはわざとErrorを発生させるcgi等へ 飛ばす //header("Location: http://500Error.cgi"); という手もあるでしょうが。 一応確認したところ動作はしましたが、いうまでもなく別スクリプトで当該phpを実行することになり、URI・サイト構成が変わってしまうため、事実上使えない…と思います。 >とりあえず現状はset_error_handlerでキャッチして~ 私ならやはりこちらを使用します。(これで全てのエラーが取れると助かるんですけどね。)
- JaneDue
- ベストアンサー率75% (263/350)
Fatal Error が発生するとすべての処理が停止し、そのスクリプト自体ではエラーの発生そのものさえキャッチできません。やるなら、別ファイルから判定・処理するしかないかと。 参考: http://jp2.php.net/manual/ja/function.set-error-handler.php 特に「以下のエラータイプは、ユーザ定義の関数では扱えません~」のところ。
お礼
回答ありがとうございます! ApacheのErrorDocumentを表示はしてくれないのですかね? とりあえず現状はset_error_handlerでキャッチして、エラー画面を出力してexitしています。 ユーザー定義関数ではE_ERROR, E_PARSEなどのエラーを扱えないとのことなので、 PHPはE_ERROR, E_PARSEなどのエラーが発生したら画面が真っ白(orエラー文)になるしかない。 という結論になりますね。。。 ありえない。。。 >やるなら、別ファイルから判定・処理するしかないかと。 すいません。私の力不足で想像できません。。。 もう少し詳しくお願いします。。!
お礼
なるほど!!! この方法ならいけますね。!! 大変参考になりました。 ありがとうございました!!!!!!