PHPでFetalなエラーが発生した場合、ApacheのErrorDocument 500で設定したメッセージが表示されない
- 質問者はPHPでFetalなエラーが発生した場合に、ApacheのErrorDocument 500で指定したメッセージが表示されない問題に直面しています。
- 質問者はApacheの設定とPHPの設定を確認しましたが、解決策が見つかりませんでした。
- 質問者は、どのようにすればErrorDocument 500で設定したメッセージが表示されるかを知りたいとしています。
- ベストアンサー
PHPでFetalなエラーが発生した場合
PHPでFetalなエラーが発生した場合 に、ApacheのErrorDocument 500で指定したメッセージを表示させたいのですが、上手くいきません。 ■Apacheの設定 ErrorDocument 500 "The server made a boo boo." ■PHPの設定 error_reporting(6135); // 0にしてもダメでした ini_set('display_errors', '1'); // 0にしてもダメでした ■PHPのコード <?php throw new Excpetopn('err!'); ?> ブラウザからアクセスすると、httpレスポンスコードは500が返ってきています。 ini_set('display_errors', '1'); にすると、 Fatal error: Uncaught exception 'Exception' with message が表示されます。 逆に ini_set('display_errors', '0'); にすると、 何も表示されません。 どうしたら、ErrorDocument 500で設定した"The server made a boo boo."が表示されるようになりますでしょ うか。。 そもそも表示できないのでは?と思いはじめてますが。。 知っている方いましたら、ぜひともご教授下さい。 よろしくおねがいいたします。 Apache 2.2.3 PHP5.3.0
- xxyybbaa55
- お礼率29% (20/67)
- PHP
- 回答数3
- ありがとう数6
- みんなの回答 (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エラー文)になるしかない。 という結論になりますね。。。 ありえない。。。 >やるなら、別ファイルから判定・処理するしかないかと。 すいません。私の力不足で想像できません。。。 もう少し詳しくお願いします。。!
関連するQ&A
- php4でエラーが発生したか検知する方法はありますか?
php4で、ini_set("display_errors",0); でエラーを非表示にした場合でも、 WarrningやFatal Errorが発生したか判別する方法はあるでしょうか? 宜しくお願いします。
- ベストアンサー
- PHP
- PHP display_errorsが設定出来ない
PHP 5.3.3 php.iniでは display_errors = Off ですが、php内で ini_set( 'display_errors', "On" ); するも 標準出力にエラーが表示されません。 設定の上書き禁止設定とかありましたっけ・・・
- ベストアンサー
- PHP
- ブラウザからPHPをアクセスしたときに
ブラウザにPHPエラーを表示させるには PHPをおいているサーバのPHP設定ファイルで php.ini display_errors=on とすればできますが php.ini display_errors=off としていても php.ini display_errors=on の時と同じようにブラウザにエラーを表示させる方法は有るのでしょうか?
- ベストアンサー
- PHP
- PHPで画面でなくファイルにエラー出力したいです。
本番運用しているサーバーで、 ini_set("display_errors","Off"); としているのですが、エラーになった場合、 ini_set("display_errors","On"); の時と同じエラーをファイルに出力する事は可能でしょうか?
- ベストアンサー
- PHP
- ファイル内でのini_set
ファイル内でのini_setの挙動について意味がわかりません。 エラー表示を制御させたくphpファイル内にini_set('display_errors', 0);としました。 echo ini_get('display_errors');//1と表示 ini_set('display_errors', 0); //$str = "aaa" echo ini_get('display_errors');//0と表示 exit; この状態で$strのコメントを外すとなぜかエラーがきっちり表示されてしまいます。 調べたところファイル内で設定できないものもあるがこの項目についてはファイル内で 制御できるとありました。 .htaccessではinclude_pathの設定をしているだけでdisplay_errorsの設定はしておらず全く 原因がわかりません・・・ちなみに.htaccessでphp_value display_errors Offを入れると エラーは表示されません。 環境はphp5でxamppを利用しております。 ローカルか運用サーバーかでそれぞれの制御を変えたくできればphp内で行いたいのですが どうすればいいものでしょうか?
- 締切済み
- PHP
- エラーが画面に表示されません。
エラーが画面に表示されません。 エラーが画面に全く表示されず、エラーが発生するとブランクのページが表示されます。 php.iniのdisplay_errorsはOnに設定しており、phpinfo()で確認してもdisplay_errorsの欄はonになっています。 何か他に原因は考えられますでしょうか。 よろしくお願いします。 環境:CentOS 5.4 + Apache 2.2.3 + PHP 5.1.6
- ベストアンサー
- PHP
- PHPのエラーがでない
お世話になります よろしくお願いします 使えるネット様のサーバーを使用しています。 PHPでデバッグ用にエラーの表示をしたいのですが どうすればいいか分からず困っています [php.ini] ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Error handling and logging ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; error_reporting = E_ALL & ~E_NOTICE display_errors = On display_startup_errors = Off log_errors = Off log_errors_max_len = 1024 ignore_repeated_errors = Off ignore_repeated_source = Off report_memleaks = On track_errors = Off html_errors = On ソースに error_reporting(E_ALL|E_STRICT); を入れてもだめでした 怪しいところといえば phpinfoで Configurationの箇所がLocal ValueとMaster Valueに分かれているのですが Master Valueのほうがdisplay_errors On Local Valueのほうがdisplay_errors Off になっています。 原因はこれじゃないかなと思っているのですが どうすればいいか分からず困っています 以上よろしくお願いします
- ベストアンサー
- ハードウェア・サーバー
- PHP5.3:iniの設定内容が反映されない?
お世話になります。 ■環境 CentOS5.5(32bit)に、yumでPHP5.3.5を入れて使用しています。(remiリポジトリ使用) php.iniは、'display_errors'をOffにする以外、デフォルトの状態です。 ■状況 PHPを使ってシェルスクリプトを書いています。 ---------------------------- #!/usr/bin/php <?php ~※~ ?> ---------------------------- 上記の※の箇所で実際に処理を書いていて、 コンソールから実行したところ、これら自体は正常に実行されています。 ただ、非推奨の関数や記述方法を使用した際に表示される 'Deplicate'エラーがコンソール上に出力されてしまいます。 (エラー自体がPHP5.3から追加されていることと、原因箇所自体は理解しています。) ■質問 ここで気になっているのは、php.iniで'display_errors'をOffにしているのに、 なぜ表示されてしまうのか、ということです。 同様の「エラーの出力される処理」をブラウザから起動した場合は エラーが抑制されていたため、php.ini自体は問題ないように思われます。 一応、シェルスクリプト上でini_set()で'display_errors'をOffにすると消えることを確認しましたので 回避自体はできるのですが、今後ほかの設定値をphp.iniで変更した場合、 影響がでそうなので、困っています。 コマンドラインから起動する場合、php.iniになにか編集が必要なのでしょうか? 以上、長文となりましたが、どなたかご教示いただきたく存じます。
- 締切済み
- PHP
- PHPのエラー表示について
PHPを勉強し始めたばかりの初心者です。 開発環境はDreamweaverとwebmatrixです。 出力結果をブラウザで確認しているのですが、 エラーの詳細が表示されず HTTPステータスコード(404 Not Foundなど)しか返ってきません。 php.iniは、ネットで調べて以下のように設定しました。 display_errors = On error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT でも、表示が変わりません。 phpinfo();の結果表示内のLoaded Configuration Fileの項目は C:\xampp\php\php.iniですので、それを編集しています。 更新されてないのかな?と思ってPCを再起動しましたが変わりませんでした。 ご存知の方がいらっしゃいましたら、ご教示ください。 よろしくお願いいたします。
- 締切済み
- PHP
お礼
なるほど!!! この方法ならいけますね。!! 大変参考になりました。 ありがとうございました!!!!!!