• ベストアンサー

php4でエラーが発生したか検知する方法はありますか?

php4で、ini_set("display_errors",0); でエラーを非表示にした場合でも、 WarrningやFatal Errorが発生したか判別する方法はあるでしょうか? 宜しくお願いします。

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

  • ベストアンサー
  • sgcarrot
  • ベストアンサー率68% (17/25)
回答No.1

php5だと、error_get_lastで、最後に発生したエラーの情報が取れるのですが、php4だと使えませんね。 ちょっと、めんどくさいですが、set_error_handlerを使って、エラー処理ルーチンを作って、そこで判別してはどうでしょうか? テストしてませんが、こんな感じでいけるのではないかと思います。 function ErrHandler($errno, $errstr, $errfile, $errline) { global $errsts; if ($errno == E_USER_ERROR ) $errsts="ERROR発生"; elseif ($errno == E_USER_WARNING ) $errsts="WARNING発生"; elseif ($errno == E_USER_NOTICE ) $errsts="NOTICE発生"; else $errsts="その他の何か発生"; $errsts .= $errstr; return true; } $errsts = ""; set_error_handler("myErrorHandler"); // エラーハンドラを指定 ・・・・・・・・ // ここでエラーが発生するかもしれない処理を実行 restore_error_handler(); // エラーハンドラを元に戻す if ( $errsts != "" ) { print $errsts; }

php4
質問者

お礼

function myErrorHandlerとすることで動作しました。 set_error_handler()の使い方が理解でき、目的を達成でき大変助かりました。ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 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

    • ベストアンサー
    • PHP
  • PHP display_errorsが設定出来ない

    PHP 5.3.3 php.iniでは display_errors = Off ですが、php内で ini_set( 'display_errors', "On" );  するも 標準出力にエラーが表示されません。 設定の上書き禁止設定とかありましたっけ・・・

    • ベストアンサー
    • PHP
  • PHPで画面でなくファイルにエラー出力したいです。

    本番運用しているサーバーで、 ini_set("display_errors","Off"); としているのですが、エラーになった場合、 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
  • ファイル内での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
  • 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でデバッグ用にエラーの表示をしたいのですが どうすればいいか分からず困っています [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 になっています。 原因はこれじゃないかなと思っているのですが どうすればいいか分からず困っています 以上よろしくお願いします

  • エラーが画面に表示されません。

    エラーが画面に表示されません。 エラーが画面に全く表示されず、エラーが発生するとブランクのページが表示されます。 php.iniのdisplay_errorsはOnに設定しており、phpinfo()で確認してもdisplay_errorsの欄はonになっています。 何か他に原因は考えられますでしょうか。 よろしくお願いします。 環境:CentOS 5.4 + Apache 2.2.3 + PHP 5.1.6

    • ベストアンサー
    • PHP
  • PHPのエラー表示

    よろしくお願いします。 使えるねっとの専用サーバーを使っています。 そこで質問ですが、Tera Termでサーバーに接続して etc/php.iniファイルの設定をいじって PHPのエラーが出るようにしたいのですが error_reporting = E_ALL & ~E_NOTICE と display_errors=Onを設定して Apacheの再起動をしたのですが エラーが表示されず、真っ白の画面が表示されるままなのですが どうしたらエラーの表示ができるのでしょうか? 以上よろしくお願いします。

    • 締切済み
    • 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