在PHP网站中,全局异常处理是确保应用稳定性和用户体验的关键。通过集中管理异常,可以避免未捕获的异常导致敏感信息泄露或页面崩溃。以下是完整的全局异常处理实现方案:
一、核心实现方案
1. 自定义异常处理器
php
// config/error_handler.phpset_exception_handler(function (Throwable $exception) { // 记录详细错误日志 error_log(sprintf( "", date('Y-m-d H:i:s'), $exception->getMessage(), $exception->getFile(), $exception->getLine(), $exception->getTraceAsString() )); // 根据环境返回不同响应 if (env('APP_ENV') === 'production') { // 生产环境显示友好错误页 http_response_code(500); include __DIR__ . '/../resources/views/errors/500.php'; } else { // 开发环境显示完整错误信息 echo ""; }});
";
echo "异常类型: " . get_class($exception) . "\n";
echo "错误信息: " . $exception->getMessage() . "\n";
echo "文件位置: " . $exception->getFile() . ":" . $exception->getLine() . "\n\n";
echo "堆栈跟踪:\n" . $exception->getTraceAsString();
echo "
2. 错误转异常处理
php
set_error_handler(function ($severity, $message, $file, $line) { if (!(error_reporting() & $severity)) { return; // 忽略@抑制的错误 } throw new ErrorException($message, 0, $severity, $file, $line);});
二、框架集成方案(以Laravel为例)
1. 异常处理器类
php
// app/Exceptions/Handler.phpnamespace App\Exceptions;use Throwable;use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;class Handler extends ExceptionHandler{ public function register() { $this->reportable(function (Throwable $e) { // 自定义日志记录 if (app()->bound('sentry')) { app('sentry')->captureException($e); } }); } public function render($request, Throwable $e) { // API请求返回
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.