• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PHPでFetalなエラーが発生した場合)

PHPでFetalなエラーが発生した場合、ApacheのErrorDocument 500で設定したメッセージが表示されない

このQ&Aのポイント
  • 質問者はPHPでFetalなエラーが発生した場合に、ApacheのErrorDocument 500で指定したメッセージが表示されない問題に直面しています。
  • 質問者はApacheの設定とPHPの設定を確認しましたが、解決策が見つかりませんでした。
  • 質問者は、どのようにすればErrorDocument 500で設定したメッセージが表示されるかを知りたいとしています。

質問者が選んだベストアンサー

  • ベストアンサー
  • JaneDue
  • ベストアンサー率75% (263/350)
回答No.3

#Ano2追記です。 関数register_shutdown_function()とtry-catch で、致命的エラー後も処理を継続する例がありますね。参考になるかも知れません。 http://keicode.com/cgi/php-error-handling.php

xxyybbaa55
質問者

お礼

なるほど!!! この方法ならいけますね。!! 大変参考になりました。 ありがとうございました!!!!!!

その他の回答 (2)

  • JaneDue
  • ベストアンサー率75% (263/350)
回答No.2

>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)
回答No.1

Fatal Error が発生するとすべての処理が停止し、そのスクリプト自体ではエラーの発生そのものさえキャッチできません。やるなら、別ファイルから判定・処理するしかないかと。 参考: http://jp2.php.net/manual/ja/function.set-error-handler.php 特に「以下のエラータイプは、ユーザ定義の関数では扱えません~」のところ。

xxyybbaa55
質問者

お礼

回答ありがとうございます! ApacheのErrorDocumentを表示はしてくれないのですかね? とりあえず現状はset_error_handlerでキャッチして、エラー画面を出力してexitしています。 ユーザー定義関数ではE_ERROR, E_PARSEなどのエラーを扱えないとのことなので、 PHPはE_ERROR, E_PARSEなどのエラーが発生したら画面が真っ白(orエラー文)になるしかない。 という結論になりますね。。。 ありえない。。。 >やるなら、別ファイルから判定・処理するしかないかと。 すいません。私の力不足で想像できません。。。 もう少し詳しくお願いします。。!

関連するQ&A