php生产环境必须关闭错误显示、开启错误日志、设置严格错误级别并隐藏php版本信息;具体为display_errors=off、log_errors=on、error_reporting=e_error|e_parse|e_core_error|e_compile_error|e_user_error、expose_php=off。

PHP生产环境必须关闭错误显示,只记录错误日志,不暴露任何错误信息给用户。
关闭错误显示(display_errors)
这是最关键的一步。开启时会把错误直接输出到浏览器,极易泄露服务器路径、数据库结构等敏感信息。
- 在 php.ini 中设置:
display_errors = Off - 如果无法修改 php.ini(如共享主机),可在入口文件(如 index.php)顶部添加:
开启错误日志记录(log_errors)
错误不能“消失”,而要安全地写入日志文件供开发者排查。
- 确保 php.ini 中启用日志:
log_errors = On - 指定日志路径(需 PHP 有写入权限):
error_log = /var/log/php_errors.log
(Linux)或
error_log = C:\php\logs\php_errors.log
(Windows) - 也可在代码中动态设置(推荐放在入口文件开头):
ini_set('log_errors', '1');
ini_set('error_log', '/path/to/your/php_error.log');
设置错误报告级别(error_reporting)
生产环境建议只记录运行时错误,避免警告和通知干扰日志。
- 推荐配置(记录错误、警告、解析错误,但忽略通知和严格标准):
error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED - 更保守的生产配置(仅致命错误、编译错误、运行时错误):
error_reporting = E_ERROR | E_PARSE | E_CORE_ERROR | E_COMPILE_ERROR | E_USER_ERROR - 代码中等效写法:
禁用 PHP 版本与配置泄露(expose_php)
HTTP 响应头中的 X-Powered-By 可能暴露 PHP 版本,增加被针对性攻击风险。
- 在 php.ini 中关闭:
expose_php = Off - 效果:移除响应头 X-Powered-By: PHP/8.2.12
完整入口文件(index.php)顶部示例:
// 生产环境错误控制ini_set('display_errors', '0');
ini_set('log_errors', '1');
ini_set('error_log', '/var/log/php_errors.log');
error_reporting(E_ERROR | E_PARSE | E_CORE_ERROR | E_COMPILE_ERROR | E_USER_ERROR);
// 可选:运行时隐藏 PHP 版本(需配合 expose_php=Off 使用)
header('X-Powered-By: ');
// 后续业务逻辑...
不复杂但容易忽略。改完记得重启 Web 服务(如 Apache/Nginx + PHP-FPM),并用触发一个错误(如调用不存在函数)验证是否写入日志且页面无报错输出。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











