volcanus / error
简单的错误和异常处理器
3.0.0
2023-02-02 07:12 UTC
Requires
- php: ^8.1
- ext-mbstring: *
Requires (Dev)
- phpunit/phpunit: ^9.5
README
这是一个用于错误和异常处理的类。
它支持以下功能。
- 提供错误处理器/异常处理器的功能。
- 使用错误处理器/异常处理器执行用户定义的可调用错误日志函数、错误消息显示函数、错误页面跳转函数。
- 将PHP错误和异常消息格式化为统一格式。也可以使用用户定义的可调用消息格式化函数、堆栈跟踪格式化函数。
- 可以根据错误级别设置错误日志/错误消息显示/错误页面跳转的允许与否。
以下功能不支持。
- 错误发生时发送邮件…请在需要时通过用户定义的错误日志函数执行。
- 设置和解除正在运行的环境中的错误处理器/异常处理器…请在需要时自行操作。
- 提供默认的错误日志函数、错误页面跳转函数…只实现了错误消息显示函数的默认实现。
以下是一个使用示例。
<?php use Volcanus\Error\ErrorHandler; class HttpException extends Exception {} // 設定オプションを指定してインスタンスを生成する $error = new ErrorHandler([ // HTML出力時のエンコーディング 'output_encoding' => 'UTF-8', // エラーログ関数を実行するエラーレベル 'log_level' => ErrorHandler::LEVEL_ALL, // エラーメッセージ表示関数を実行するエラーレベル 'display_level' => ErrorHandler::LEVEL_ALL, // エラー画面遷移関数を実行するエラーレベル 'forward_level' => ErrorHandler::LEVEL_EXCEPTION | ErrorHandler::LEVEL_ERROR, // デフォルトのエラーメッセージ表示時にHTMLとして出力するかどうか 'display_html' => true, // エラーメッセージ表示関数を出力バッファリングするかどうか 'display_buffering' => true, ]); // ユーザー定義のエラーログ関数を指定する $error->setLogger(function($message, $exception = null) { error_log(sprintf("[%s] %s\n", date('Y-m-d H:i:s'), $message), 3, dirname(__FILE__) . DIRECTORY_SEPARATOR . 'log' . DIRECTORY_SEPARATOR . 'php_error.log'); }); // ユーザー定義のエラー画面遷移関数を指定する $error->setForward(function($message, $exception = null) { $status = '500 Internal Server Error'; if (isset($exception) && $exception instanceof HttpException) { switch ($exception->getCode()) { case 400: $status = '400 Bad Request'; break; case 403: $status = '403 Forbidden'; break; case 404: $status = '404 Not Found'; break; case 405: $status = '405 Method Not Allowed'; break; } } if (!headers_sent()) { header($_SERVER['SERVER_PROTOCOL'] . ' ' . $status); } $body = <<< HTML <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8" /> <title>%s</title> </head> <body> <h1>%s</h1> <h2>システムエラーが発生しました。</h2> <hr /> <p><a href="%s">戻る</a></p> </body> </html> HTML; echo sprintf($body, htmlspecialchars($status, ENT_QUOTES, 'UTF-8'), htmlspecialchars($status, ENT_QUOTES, 'UTF-8'), htmlspecialchars($_SERVER['REQUEST_URI'], ENT_QUOTES, 'UTF-8')); exit(); }); // エラーハンドラおよび例外ハンドラとして設定する set_error_handler($error->getErrorHandler()); set_exception_handler($error->getExceptionHandler()); // 例外ハンドラを発動 throw new HttpException('Invalid Parameter', 400);
适用环境
- PHP 8.1及以后版本