跳转到主内容
websoft网络软件专家 - 深耕网络技术,打造实用软件!

php怎么使用Flight错误处理_php如何自定义404/500页面响应

Flight 的 error 回调不触发,因默认不捕获 PHP 致命错误;需在 Flight::start() 前注册回调,并配合 set_error_handler 和 register_shutdown_function 处理致命错误。 Flight 中
error
回调不触发?先确认是否启用了错误捕获 Flight 默认不会自动捕获 PHP 致命错误(如
Fatal error: Call to undefined function
),它只处理抛出的异常和手动调用的
Flight::error()
。如果你改了
error
回调但 500 页面没变,大概率是错误根本没进到 Flight 的流程里。 实操建议: PHP 8.5.5 PHP 8.5.5 是 PHP 8.5 分支的维护更新版本。该版本延续了“小步快跑”的迭代逻辑,通过深度错误修复、底层性能微调以及安全加固,旨在为开发者提供一个更健壮、更高效的运行环境。该版本严格遵守语义化版本规范,不包含破坏性变更。 下载 确保在
Flight::start()
前注册了
Flight::error()
回调,否则无效 检查
display_errors
和
error_reporting
设置——它们会影响底层错误是否被转成异常;推荐在入口文件开头加
error_reporting(E_ALL); ini_set('display_errors', '0');
致命错误(Parse/Compile/Fatal)需配合
set_error_handler
+
register_shutdown_function
才能兜底,Flight 本身不接管这部分 自定义 404 响应:用
notFound
而不是
error
404 是路由未匹配,属于正常控制流分支,不是错误。Flight 提供专用的
Flight::notFound()
回调,别往
error
里塞 404 逻辑,否则会干扰真实错误排查。 常见错误现象:访问不存在路径时返回空白页或默认 Apache/Nginx 404,说明
notFound
没生效。 立即学习 “ PHP免费学习笔记(深入) ”; 实操建议: 必须在
Flight::start()
之前注册:
Flight::notFound(function() { http_response_code(404); echo '自定义404页面'; });
如果用了 URL 重写(如 Apache 的
.htaccess
),确保所有请求都落到
index.php
,否则 Flight 根本收不到请求 不要在
notFound
回调里 throw 新异常——这会跳转到
error
回调,导致 404 变成 500 返回 JSON 格式的 404/500 响应:注意
Content-Type
和状态码顺序 API 场景下,前端依赖正确的
Content-Type: application/json
和 HTTP 状态码。Flight 不会自动设置响应头,漏掉会导致前端解析失败或状态码被忽略。 实操建议: 在
notFound
或
error
回调开头立即调用
http_response_code(404)
或
http_response_code(500)
;放在
header()
之后可能失效 手动设置头:
header('Content-Type: application/json; charset=utf-8');
示例:
Flight::notFound(function() { http_response_code(404); header('Content-Type: application/json; charset=utf-8'); echo json_encode(['error' => 'Not Found'], JSON_UNESCAPED_UNICODE); });
生产环境禁用调试信息:
display_errors
关闭后仍要控制输出内容 即使
display_errors=Off
,Flight 的
error
回调若直接
echo $e->getMessage()
,依然会把敏感信息(如路径、数据库配置片段)暴露给用户。 实操建议: 开发环境可保留详细错误,生产环境回调中只输出泛化提示,例如
'Something went wrong.'
记录完整错误到日志:
error_log($e->getMessage() . ' in ' . $e->getFile() . ':' . $e->getLine(), 3, '/var/log/flight-error.log');
避免在回调里调用
var_dump
、
print_r
或未过滤的
$e->__toString()
真正容易被忽略的是:Flight 的错误处理只是应用层一环,Web 服务器(如 Nginx)可能配置了
error_page 500 /50x.html
,会覆盖 PHP 输出。上线前务必检查服务器级错误页配置是否冲突。

相关文章