PHPでfatal errorが出ても無視して続行する方法はありませんでしょうか?
- PHPでfatal errorが出ても無視して続行する方法はありますか?エラー制御演算子を使用しても、エラー以降の構文は実行されません。例外以外のエラーでは強制終了してしまいます。次の行へ進む方法はありませんか?
- PHPのfatal errorが発生しても、続行する方法はありますか?エラー制御演算子を使用しても、エラー以降のコードは実行されません。例外以外のエラーではプログラムは終了してしまいます。次の行へ進む方法はあるでしょうか?
- PHPでfatal errorが出ても、処理を続行する方法はありますか?エラー制御演算子を使用した場合でも、エラー以降のコードは実行されません。例外以外のエラーではプログラムは停止してしまいます。次の行に進む方法はありますか?
- ベストアンサー
PHPでfatal errorが出ても無視して続行
PHPでfatal errorが出ても無視して続行する方法はありませんでしょうか? PHPバージョン 5.3.3 @(アットマーク エラー制御演算子)を入れてやってみましたが、エラーは表示されなくなりますが、それ以降の構文が実行されません。 warningは元々次に進むので良いのですが、fatal errorの場合、そこで終了してしまいそれ以降が実行できません。 ・標準出力へのエラーメッセージの表示はあってもなくてもどっちでもいい。 ・parse errorに関しては今回は続行しなくてもいい。(続行しても良い。) try{ エラーになるコード; }catch(Exception $e){ } ですべてのエクセプションを拾って次へ行くという方法が有ることはわかっていますが、例外以外のエラーではそこで強制終了してしまっています。 何とかエラーの出る次の行へ進む方法は無いでしょうか? よろしくお願いいたします。
- mentaiko2
- お礼率47% (37/78)
- PHP
- 回答数4
- ありがとう数3
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
set_error_handler()などエラー処理をいれてみては? http://www.php.net/manual/ja/book.errorfunc.php たとえば、 <?PHP print "x"; trigger_error("hoge", E_USER_ERROR); print "y"; ?> を実行すると、xが表示された後Fortal errorが発生してyは表示されません。 こうすると、フォータルエラーをつかんで復帰します エラーの種類によってcaseを分けて処理していけばよいでしょう。 (さすがにシンタックスエラーは回避できないとおもいますが) <?php function myErrorHandler($errno, $errstr, $errfile, $errline) { switch ($errno) { case E_USER_ERROR: print "致命的なエラー つづく...<br>"; break; default: print "その他のエラー"; break; } return true; } $old_error_handler = set_error_handler("myErrorHandler"); print "x"; trigger_error("hoge", E_USER_ERROR); print "y"; ?>
その他の回答 (3)
- pa_cotta
- ベストアンサー率43% (25/58)
いや、ワーニングじゃなくてエラーが出てるのに先に進ませても意味がないです。 しかもparse errorって構文エラーのことですから、プログラムを実行する以前の問題です。 変な横着はしないできちんとエラーが出るたびに該当箇所を修正しましょう。 どうしても先に進みたいのであれば、エラーが出ている部分をコメントアウトするなりスタブを作って回避するなりすればいいですが、修正忘れなどしないように注意が必要です。
- めとろいと(@naktak)
- ベストアンサー率36% (785/2139)
致命的なエラーの為、続行させる為には、致命的なエラーが発生しないように プログラムを直しましょう。 また、警告エラーも、本来出っぱなしになっていても良いものではありませんよ。
お礼
http://keicode.com/cgi/php-error-handling.php 結局次に進めるのはtrycatchで拾える分のみにして、それ以外は上記サイトのregister_shutdown_functionを使ってエラー処理を行うことにしました。 ありがとうございました。
補足
後だしになってしまって申し訳ないのですが、fatal errorの発生する可能性のあるphpファイルが暗号化されているファイルで編集一切不可能なのです。 それを呼び出すのは必須条件のためそれをインクルードする部分もしくはインクルードする処理の関数を呼び出す部分で@もしくはtry等をするしかないと思っていますが、fatalerrorを引き起こした時処理を呼び出し元に戻したいと思っていますが、上手くいきません。 処理自体はファイルを生成するというのが大部分のためerrorになったかどうかはファイルが出来ているかを確認することで何とか出来そうなので、エラーになってもその次に進めたいと考えています。 shell_exec等でphpコマンドから該当ファイルを呼ぶ等も候補に入れています。 何かいい方法は無いでしょうか?
- agunuz
- ベストアンサー率65% (288/438)
fatal errorの意味を理解されていないのでしょうか? http://ejje.weblio.jp/content/fatal+error 無視して続行することが不可能なエラーだから止まるのですよ。
お礼
後だしになってしまって申し訳ないのですが、fatal errorの発生する可能性のあるphpファイルが暗号化されているファイルで編集一切不可能なのです。 それを呼び出すのは必須条件のためそれをインクルードする部分もしくはインクルードする処理の関数を呼び出す部分で@もしくはtry等をするしかないと思っていますが、fatalerrorを引き起こした時処理を呼び出し元に戻したいと思っていますが、上手くいきません。 処理自体はファイルを生成するというのが大部分のためerrorになったかどうかはファイルが出来ているかを確認することで何とか出来そうなので、エラーになってもその次に進めたいと考えています。 http://keicode.com/cgi/php-error-handling.php 結局次に進めるのはtrycatchで拾える分のみにして、それ以外は上記サイトのregister_shutdown_functionを使ってエラー処理を行うことにしました。 ありがとうございました。
関連するQ&A
- PHPのエラーを無視したい
phpで以下のエラーが出ます。 原因は初期値の関連の問題のようですが、この警告が出ないようにする方法を教えてください。 Warning: Creating default object from empty value
- ベストアンサー
- PHP
- PHPのエラー「Unexpected character ...」「syntax error, unexpected ...」について
PHP Warning: Unexpected character in input: ''' (ASCII=39) state=1 in /home/***/***.php on line 25 PHP Parse error: syntax error, unexpected '<' in /home/***/***.php on line 26 という2行のエラーが表示されました。 まったく明快な答えは探せませんでした。 もしも少しでも手がかりになるような情報がありましたら教えて下さい。 お願いします。
- 締切済み
- PHP
- PHP+PostgreSQLでのエラー
PHP3+PostgreSQLで開発をしています。 クラスライブラリを使って動かそうとしているのですが、 -------------------------------------------------- Warning: Division by zero in /○○.php3 on line 10 Parse error: parse error in /○○.php3 on line 10 -------------------------------------------------- というエラー?ワーニングが出ます。 これは何を意味しているのでしょうか? ご教授ください。 上記のワーニングにあるline 10には require($include_path/dbconnect.inc"); を記述しています。 PHP4徹底攻略/ソフトバンク パブリッシング のサンプルプログラム(P136~)を参考にコーディングしました。 また、このようなエラーメッセージがわかるサイトがありましたら重ねて教えて頂きたいと思います。 よろしくお願いします。
- ベストアンサー
- その他(データベース)
- PHPのParse errorについて質問
PHPのParse errorについて質問ですが、 昨日より、Apacheサーバーなどの設定を変更していないにも関わらず、急に以下の様なエラーが頻繁に 表示されます。 原因は、なんでしょうか? どうやって修正すればいいのでしょうか? Parse error: parse error, unexpected T_ELSE in ディレクトリ名/index.php on line 43
- ベストアンサー
- PHP
- PHPの例外処理
PHPの例外処理について教えてください function test() { try{ $a = 10; $b = 0; $result = $a/$b; } catch(Exception $e){ //エラー処理 } } 上記でcatchが実行されるためにはどのようにすれば良いでしょうか?例えば if($b == 0) { throw new Exception('例外'); } を「$result = $a/$b;」の前に書いておくなどすればcatchされるのはわかりますが、 想定されるすべての例外のthrow処理を記載するなんてことはしたくありません。 実行してエラーだったら自動的にthrowされる、なんていうことはPHPでは無理でしょうか?
- ベストアンサー
- PHP
- PHPのエラー表示を変更(非表示)したい
PHPを実行して、上手く処理できないと下記のよなエラー表示がされると思います。 Warning: ~~~(エラーの内容)~~~ on line 17(エラーの行数) このようなエラー表示を非表示にしたり、エラーが出た場合に別のファイルを参照して表示させる事はできるのでしょうか? 403や404、500のエラー表示は、htaccessで変更できますよね。 phpのエラー表示も変更する事はできるのでしょうか? アドバイスをお願い致します。
- ベストアンサー
- PHP
- PHPのセグメンテーション違反に対する例外処理について
PHPのセグメンテーション違反に対する例外処理について 再帰呼び出しのプログラム(error_seg.php)を作成し、Linuxのシェルで $ php error_seg.php と実行しました。 実行環境: PHPのバージョン:5.2.10 Linuxのバージョン:2.6.18-164.15.1.el5 (mockbuild@builder16.centos.org) (gcc version 4.1.2 20080704 (Red Hat 4.1.2-46)) #1 SMP Wed Mar 17 11:37:14 EDT 2010 プログラムは下記の通りです。 <?php $cnt=0; function func(){ global $cnt; $cnt++; print $cnt . "回目の呼び出し\n"; func(); } try{ func(); }catch(Exception $e){ echo "例外発生:" . $e->getMessage()."\n"; } ?> ※このプログラムは、 http://d.hatena.ne.jp/syonbori_tech/20090414/1239717538 のサイトを参考にして作りました。 この結果、 1回目の呼び出し 2回目の呼び出し ・・・ 26187回目の呼び出し 26188回目の呼び出し セグメンテーション違反です と表示され、セグメンテーション違反を再現させました。 ※何回目でセグメンテーション違反が発生するかは、 その都度異なります。 プログラム中で、try-catchの例外処理を入れたのですが、 例外処理されないようです。セグメンテーション違反に対して 例外処理をすることはできないのでしょうか。 できるとすれば、どのように記述をすればよいでしょうか。
- ベストアンサー
- PHP
- MTをphp化したあとにRSSリーダーでエラーが出る。
タイトルそのままなのですが、 MTをphp化し、ソースの1行目も <?php echo '<?xml version="1.0" encoding="UTF-8" ?>'; ?> に書き換え、通常のブラウザで見る分にはきちんと表示されているのですが、 RSSリーダーで読み込むと Parse error: parse error, unexpected T_STRING in …php on line 1 のエラーになってしまいます。 解決策をご存知の方がいらっしゃいましたらご教授ください。 よろしくお願いします。
- 締切済み
- ブログ
お礼
http://keicode.com/cgi/php-error-handling.php 結局次に進めるのはtrycatchで拾える分のみにして、それ以外は上記サイトのregister_shutdown_functionを使ってエラー処理を行うことにしました。 set_error_handlerのキーワードで検索した時に引っかかってきたのがegister_shutdown_functionだったので、この回答が無ければたどり着けませんでした。 ありがとうございました。