PHPでfatal errorが出ても無視して続行する方法はありませんでしょうか?
PHPバージョン 5.3.3
@(アットマーク エラー制御演算子)を入れてやってみましたが、エラーは表示されなくなりますが、それ以降の構文が実行されません。
warningは元々次に進むので良いのですが、fatal errorの場合、そこで終了してしまいそれ以降が実行できません。
・標準出力へのエラーメッセージの表示はあってもなくてもどっちでもいい。
・parse errorに関しては今回は続行しなくてもいい。(続行しても良い。)
try{
エラーになるコード;
}catch(Exception $e){
}
ですべてのエクセプションを拾って次へ行くという方法が有ることはわかっていますが、例外以外のエラーではそこで強制終了してしまっています。
何とかエラーの出る次の行へ進む方法は無いでしょうか?
よろしくお願いいたします。
No.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";
?>
http://keicode.com/cgi/php-error-handling.php
結局次に進めるのはtrycatchで拾える分のみにして、それ以外は上記サイトのregister_shutdown_functionを使ってエラー処理を行うことにしました。
set_error_handlerのキーワードで検索した時に引っかかってきたのがegister_shutdown_functionだったので、この回答が無ければたどり着けませんでした。
ありがとうございました。
No.3
- 回答日時:
いや、ワーニングじゃなくてエラーが出てるのに先に進ませても意味がないです。
しかもparse errorって構文エラーのことですから、プログラムを実行する以前の問題です。
変な横着はしないできちんとエラーが出るたびに該当箇所を修正しましょう。
どうしても先に進みたいのであれば、エラーが出ている部分をコメントアウトするなりスタブを作って回避するなりすればいいですが、修正忘れなどしないように注意が必要です。
No.2
- 回答日時:
致命的なエラーの為、続行させる為には、致命的なエラーが発生しないように
プログラムを直しましょう。
また、警告エラーも、本来出っぱなしになっていても良いものではありませんよ。
この回答への補足
後だしになってしまって申し訳ないのですが、fatal errorの発生する可能性のあるphpファイルが暗号化されているファイルで編集一切不可能なのです。
それを呼び出すのは必須条件のためそれをインクルードする部分もしくはインクルードする処理の関数を呼び出す部分で@もしくはtry等をするしかないと思っていますが、fatalerrorを引き起こした時処理を呼び出し元に戻したいと思っていますが、上手くいきません。
処理自体はファイルを生成するというのが大部分のためerrorになったかどうかはファイルが出来ているかを確認することで何とか出来そうなので、エラーになってもその次に進めたいと考えています。
shell_exec等でphpコマンドから該当ファイルを呼ぶ等も候補に入れています。
何かいい方法は無いでしょうか?
http://keicode.com/cgi/php-error-handling.php
結局次に進めるのはtrycatchで拾える分のみにして、それ以外は上記サイトのregister_shutdown_functionを使ってエラー処理を行うことにしました。
ありがとうございました。
No.1
- 回答日時:
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が見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- ノートパソコン Win10 EXCEL でのエラー 2 2022/04/03 15:57
- Visual Basic(VBA) 【VBAエラー】Nextに対するForがありません 対策について 5 2022/11/21 21:26
- FX・外国為替取引 MQL5にて謎のエラーが発生!だれか対処を教えてください! 1 2023/03/25 15:59
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/02/02 09:25
- オープンソース Vue+Laravelのデザインテンプレートのサンプルが起動できない 1 2022/05/18 21:52
- Visual Basic(VBA) VBAでの共有パスにつきまして 1 2023/03/04 17:24
- C言語・C++・C# プログラミングの問題です。至急教えてください。 /***から***/の部分をプログラミングにしてほし 1 2022/10/13 11:48
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- PHP phpの imap_search で漢字コード 1 2022/09/06 17:32
- Visual Basic(VBA) vba 等間隔の列に対しての計算 6 2022/05/17 20:15
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フォントの色を変えるには?
-
PHP8を使うと、大量のWarningが...
-
メールアドレスにメールが届い...
-
PHPでfatal errorが出ても無視...
-
これは例外処理でしょうか?
-
insertができない。
-
PHPで特定のURLにジャンプす...
-
urlの直接入力を防ぐには
-
パースエラーとは?
-
「@$変数」の「@の意味は?」
-
PHPで、エラーがない場合のみ画...
-
bindValueエラー
-
PHPにて外部サイト内容が取得不...
-
トランザクションが原因?DBに...
-
3つ以上の論理積は利用可能なの...
-
PHPのif文でその処理を途中で抜...
-
Subversionのリポジトリの削除
-
エンコーディングについて
-
FTPコマンドでディレクトリごと...
-
「クラス関数」「メンバ関数」...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
フォントの色を変えるには?
-
トランザクションが原因?DBに...
-
PHPでネットワークドライブのop...
-
PHP8を使うと、大量のWarningが...
-
パースエラーとは?
-
ワードプレスサイト PHP8.0.25...
-
「@$変数」の「@の意味は?」
-
PHPで、エラーがない場合のみ画...
-
PHPにて外部サイト内容が取得不...
-
PHPでfatal errorが出ても無視...
-
iframeからのアクセスか、ブラ...
-
phpのrenameでエラーが出ます
-
正規表現での最後尾のバックス...
-
fsockopenの例外について
-
これは例外処理でしょうか?
-
PHPで特定のURLにジャンプす...
-
bindValueエラー
-
awsにApacheとPHPを入れて、何...
-
Localeクラスについて
-
PEARのライブラリを使うと文法...
おすすめ情報