需修改php.ini中display_errors=On和error_reporting为有效值(如32767或E_ALL),重启Apache;error_reporting()函数对Parse/Fatal error无效,仅影响运行时错误。

直接改 php.ini 里的 error_reporting 和 display_errors
XAMPP 默认关闭错误显示,display_errors = Off,且 error_reporting 值通常设为 E_ALL & ~E_DEPRECATED & ~E_STRICT(但 ini 文件不解析表达式,实际等效于 0)。必须手动改成整数或确保写法被正确识别。
打开 XAMPP 控制面板 → Apache 行右侧点 Config → 选 PHP (php.ini)。找到这两行:
-
display_errors = Off→ 改成display_errors = On -
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT→ 这行无效,删掉或注释掉,换成明确整数(如 PHP 8.0+ 推荐error_reporting = 32767)或安全字符串写法error_reporting = E_ALL(PHP 7.4+ 支持)
改完保存,重启 Apache。不重启,修改不生效。
error_reporting() 函数在脚本里临时生效,但有硬限制
这个函数只能控制运行时错误(E_WARNING、E_NOTICE 等),对 Parse error、Fatal error 完全无效——因为语法错误根本没走到这行代码。
立即学习“PHP免费学习笔记(深入)”;
常见误用:
- 写在
if (DEBUG) { error_reporting(E_ALL); }里,但条件不满足 → 不起作用 - 放在出错代码之后 → 错误已经抛出,来不及捕获
- 期望靠它显示
require 'missing.php'导致的致命错误 → 不可能,必须靠php.ini的display_errors = On
正确用法示例(放在文件最顶部):
<?php
error_reporting(E_ALL & ~E_NOTICE);
ini_set('display_errors', '1');
// 后续代码才受此设置影响
为什么改了 php.ini 还看不到 Parse error?
因为 display_errors = On 是前提,而 error_reporting 只管“报什么”,不管“怎么报”。Parse error 属于解析阶段错误,绕过 error_reporting() 控制,只响应 display_errors 和 log_errors。
验证是否生效最简单的方法:在 PHP 文件开头故意写 <?p (少个 h),如果页面空白或 500,说明 display_errors 没开;如果看到 Parse error: syntax error...,才算真正打通。
注意:display_errors = On 绝对不能用于生产环境,会暴露路径、变量名甚至数据库配置片段。
开发环境推荐组合与线上禁忌
本地调试建议三件套同时开启:
display_errors = Onlog_errors = On-
error_reporting = 32767(PHP 8.0+ 的E_ALL整数值)
线上必须:
-
display_errors = Off(防止前端泄露信息) -
log_errors = On+error_log = /var/log/php_errors.log(确保致命错误有落盘记录) -
error_reporting至少保留255(即E_ERROR | E_WARNING | E_PARSE),否则require失败、函数不存在都无声无息
最容易被忽略的一点:XAMPP 的 php.ini 有两个位置——主配置和 CLI 配置(xampp/php/php.ini vs xampp/apache/bin/php.ini),Web 请求走的是后者,命令行跑脚本用前者。改错文件就白忙活。



















