PHP错误显示需同时配置display_errors和error_reporting,重启服务生效;代码中可用ini_set临时开启,但无法捕获Parse Error;线上应关闭display_errors,启用log_errors记录日志。

PHP 错误显示默认是关闭的,线上环境必须关,开发环境建议打开——但不能只靠 display_errors 单独控制,否则可能看不到 Notice 或 Parse Error。
如何用 php.ini 开关错误显示(最彻底)
这是全局生效的方式,适用于你有服务器权限或能修改 PHP 配置文件的场景。关键要同时设置两个配置项:
-
display_errors = On(让错误输出到页面)或Off(关闭) -
error_reporting = E_ALL(显示所有错误)或E_ALL & ~E_NOTICE(忽略 Notice) - 改完必须重启 Web 服务(如
sudo systemctl restart apache2或sudo service php-fpm restart) - 注意:如果用了 opcache,有时需清空缓存,否则旧配置可能仍生效
如何在代码里临时开启错误显示(适合调试)
在入口脚本(如 index.php)顶部加这几行,比改配置快,但仅对当前请求有效:
ini_set('display_errors', '1');
ini_set('error_reporting', E_ALL);
error_reporting(E_ALL);
注意:ini_set('display_errors', '1') 在某些 SAPI(如 CLI 或 CGI 模式)下无效;Parse error 这类语法错误也无法捕获——因为脚本根本没执行到这行就崩了。
立即学习“PHP免费学习笔记(深入)”;
漂亮的企业网站。NET2.0出来了, 本次升级修改如下: 1、优化了3层结构。 2、优化了后台管理代码,增强了安全性能。 3、增加了系统名称及关键字管理。 4、增加了系统错误日志记录,自动生成Systemlog.log日志文件。 备注:本系统采用ASP.NET 2.O+ACCESS开发,请调试的朋友安装.NET2.0运行环境! 网站内容 网站栏目包括 首页|企业简介|新闻中心|产品展示|公司展示|
为什么开了 display_errors 还不显示错误?
常见原因不是配置没开,而是被其他机制拦截了:
- Web 服务器(如 Nginx)配置了
fastcgi_intercept_errors on,会把 500 错误转成 404 或自定义页面 - PHP-FPM 的
php_admin_value[display_errors] = off强制覆盖了你的ini_set - 框架(如 Laravel、ThinkPHP)自带异常处理器,屏蔽了原生错误输出,得去查
APP_DEBUG或debug配置项 -
log_errors = On且error_log指向了文件,错误其实记日志了,只是没打到页面上
线上环境必须关 display_errors,但怎么查错?
不能靠页面报错,得靠日志闭环:
- 确保
log_errors = On和error_log = /var/log/php/error.log已启用 - 用
tail -f /var/log/php/error.log实时看错误 - 注意权限:PHP 进程用户(如
www-data)必须有写入该路径的权限 - 如果用 Docker,日志路径要映射出来,或改用
syslog方式输出
真正容易被忽略的是 Parse Error——它不走 error_reporting 控制,也不进日志(除非 log_errors 开着且 PHP 版本 ≥ 7.2),只能靠 IDE 语法检查或部署前 php -l index.php 预检。










