私は、さまざまな時点で cronjob ごとに php pgm を呼び出します。pgm には多くの php ファイルが含まれています。各ファイルは、パートナーとの間でデータを送受信します。
pgmが含まれているエラーを処理するにはどうすればよいですか。
その時点で、含まれている pgm の 1 つの ftp 接続が失敗するため、スクリプト全体がクラッシュします。どうすればこれを処理できますか?
明確な答えを得るには、コードについてもっと知る必要があります。
一般に、自分で例外をスローする独自のエラーハンドラーを定義しない限り、php エラーはキャッチできません。以下のコードを使用すると、ほとんどの実行時エラーがキャッチ可能になります (致命的と見なされない限り)。
error_reporing(E_ALL);
set_error_handler(function($errno, $errstr, $errfile, $errline) {
if($errno == E_STRICT || $errno == E_DEPRECATED) {
return true;
}
throw new RuntimeException('Triggered error (code '.$errno.') with message "'.$errstr.'"');
});
ところで、独自の例外ハンドラーを定義して、例外がキャッチされない場合にトリガーされたエラーを完全なスタック トレースと共に表示することもできます。
知らせ!最初に厳密なテストを行わずに、このコードを実稼働 Web サイトに追加して、すべてが期待どおりに機能することを確認することはお勧めしません。
編集:
あなたのコードがどのように見えるかはわかりませんが、次のようなことができると思います:
require 'error-handler.php'; // where you have your error handler (the code seen above)
$files_to_include = array(
'some-file.php',
'some-other-file.php',
...
);
foreach($files_to_include as $file) {
try {
include $file;
}
catch(Exception $e) {
echo "$file failed\nMessage: ".$e->getMessage()."\nTrace:\n".$e->getTraceAsString();
}
}
クラッシュする可能性のあるコードは、try/catch
構造にラップする必要があります。これにより例外がスローされますが、スクリプトは引き続き機能します。詳細はこちら。