PHP/エラーハンドリング
表示
< PHP
エラーハンドリング
[編集]エラーハンドリングの基礎
[編集]PHPではエラーを適切にキャッチし、処理を続行するための仕組みが提供されています。以下は基本的なtry-catch
構文の例です。
<?php try { // エラーを発生させるコード if (!file_exists('example.txt')) { throw new Exception('ファイルが見つかりません。'); } $content = file_get_contents('example.txt'); echo $content; } catch (Exception $e) { // エラー処理 echo "エラー: " . $e->getMessage(); } ?>
カスタム例外クラス
[編集]独自の例外クラスを作成して特定のエラーを処理できます。
<?php class CustomException extends Exception {} try { $value = -1; if ($value < 0) { throw new CustomException('値は0以上である必要があります。'); } } catch (CustomException $e) { echo "カスタム例外: " . $e->getMessage(); } catch (Exception $e) { echo "一般例外: " . $e->getMessage(); } ?>
エラーログの記録
[編集]エラーをログファイルに記録することで、運用中の問題を追跡できます。
<?php try { throw new Exception('重大なエラーが発生しました。'); } catch (Exception $e) { error_log($e->getMessage(), 3, 'error.log'); echo "エラーが記録されました。"; } ?>
カスタムエラーハンドラー
[編集]独自のエラーハンドラーを定義してエラー処理をカスタマイズできます。
<?php function customErrorHandler($errno, $errstr, $errfile, $errline) { echo "エラー [$errno]: $errstr - $errfile:$errline\n"; // 必要に応じてエラーログに記録 error_log("エラー [$errno]: $errstr - $errfile:$errline", 3, 'error.log'); return true; // 標準のエラーハンドリングをスキップ } // カスタムエラーハンドラーを設定 set_error_handler('customErrorHandler'); // 意図的にエラーを発生 echo $undefinedVariable; ?>
致命的エラーの処理
[編集]register_shutdown_function
を使って致命的エラーをキャッチできます。
<?php register_shutdown_function(function() { $error = error_get_last(); if ($error) { echo "致命的エラー: " . $error['message']; error_log("致命的エラー: " . $error['message'], 3, 'error.log'); } }); // 意図的に致命的エラーを発生 undefinedFunction(); ?>
例外とエラーの統一
[編集]Error
クラスを使用して致命的エラーを例外として処理できます。
<?php try { // 型エラーを発生 $result = 1 / 0; } catch (Error $e) { echo "エラーキャッチ: " . $e->getMessage(); } ?>