生产环境必须关闭错误显示以防止敏感信息泄露,需禁用PHP错误报告并关闭Hyperf调试模式,确保APP_DEBUG=false、display_errors=Off、log_errors=On且error_log路径可写,验证响应不暴露堆栈而仅返回统一错误页,并通过Nginx/Docker等额外加固。

生产环境必须关闭错误显示,防止敏感信息泄露。核心操作是禁用 PHP 错误报告并关闭 Hyperf 的调试模式。
修改 .env 文件
确保以下两项配置为明确关闭状态:
- APP_DEBUG=false —— 关闭框架级调试输出(如异常堆栈、路由调试面板)
- display_errors=Off(在 PHP 配置中)—— 禁止将错误直接输出到 HTTP 响应体
检查 PHP 运行时配置
Hyperf 启动依赖 PHP 环境,需确认运行用户下的 php.ini 生效项:
- 查找 display_errors 行,设为 Off
- 确认 log_errors 为 On,确保错误写入日志而非页面
- 检查 error_log 路径是否可写(例如指向
BASE_PATH/runtime/logs/php_error.log)
验证是否生效
部署后主动触发一个错误(如访问不存在的路由或故意抛出异常),观察响应:
- 返回应为统一的 404 或 500 页面(由
config/autoload/exceptions.php控制),不包含任何文件路径、数据库配置、变量 dump - 查看
runtime/logs/hyperf.log和 PHP 错误日志,确认错误已记录但未暴露给前端
额外加固建议
仅关 display_errors 不够,还需同步处理:
- Nginx/Apache 配置中添加
fastcgi_param PHP_VALUE "display_errors=Off";,防止被 .user.ini 绕过 - Docker 部署时,在
php.ini拷贝步骤后显式覆盖关键项:RUN echo "display_errors = Off\nlog_errors = On" >> /usr/local/etc/php/php.ini - 检查
config/autoload/exceptions.php中的ignoreException和render配置,避免开发用的Whoops处理器残留


















