PHP错误不显示需先开启display_errors=On和error_reporting=E_ALL,并重启服务器;若仍不显示,检查脚本是否用ini_set或error_reporting覆盖配置;生产环境应关闭display_errors,改用log_errors写入日志;Apache 500错误可能记录在自身ErrorLog中。

PHP 错误不显示?检查 display_errors 和 error_reporting
默认情况下,PHP 生产环境会关闭错误显示(display_errors = Off),即使代码出错,页面也只空白或返回 500,看不到任何提示。必须手动开启才能在浏览器中看到报错信息。
操作步骤:
- 找到当前生效的
php.ini文件(运行php --ini或phpinfo()查看 “Loaded Configuration File”) - 修改以下两项:
display_errors = Onerror_reporting = E_ALL - 重启 Web 服务器(如 Apache 或 PHP-FPM)
注意:display_errors = On 仅适用于开发环境,线上务必关掉,否则可能暴露路径、变量、数据库结构等敏感信息。
开启了 display_errors 还是没报错?确认脚本没覆盖配置
PHP 脚本里用 ini_set() 或 error_reporting() 函数可动态修改错误设置,它们优先级高于 php.ini,容易被已有代码悄悄关掉错误显示。
立即学习“PHP免费学习笔记(深入)”;
排查方法:
- 在出问题的脚本开头加一行:
var_dump(ini_get('display_errors'), error_reporting()); - 搜索项目中是否调用了:
ini_set('display_errors', '0')或error_reporting(0) - 某些框架(如 Laravel、ThinkPHP)会在入口文件或启动流程中强制设为 0,此时需改用日志方式查错
错误不显示但想保留记录?配置 error_log 写入文件
比直接显示更安全、更可持续的方式是把错误写进日志文件,尤其适合无法修改 php.ini 的共享主机或容器环境。
两种常用方式:
- 在
php.ini中设置:log_errors = Onerror_log = /var/log/php_errors.log(确保目录可写) - 在 PHP 脚本开头临时启用:
ini_set('log_errors', '1');ini_set('error_log', '/tmp/php_debug.log');
注意:如果使用 PHP-FPM,error_log 路径会被 FPM 自身的 php_admin_value[error_log] 覆盖,此时应优先修改 www.conf 中对应项。
Apache + mod_php 下 500 错误没日志?检查 ErrorLog 和 LogLevel
当 PHP 解析失败(比如语法错误导致无法加载脚本),请求甚至到不了 PHP 层,Apache 会直接返回 500,而错误留在 Apache 日志里。
确认 Apache 配置:
- 主配置或虚拟主机中是否有:
ErrorLog "/var/log/apache2/error.log" - 是否设置了足够详细的日志级别:
LogLevel warn或LogLevel error(debug级别太重,一般不用) - 修改后记得
sudo systemctl reload apache2(或apachectl graceful)
这类错误常表现为“PHP Parse error”但浏览器和 PHP 日志都空,实际藏在 Apache 的 ErrorLog 里。
最常被忽略的是:错误显示与错误日志是两套机制,display_errors 控制输出到浏览器,log_errors 控制写入文件,二者要分开配;而 Web 服务器自身的错误日志(Apache/Nginx)又是一层,它捕获的是 PHP 还没来得及介入时的崩溃。











