汇知百科
白蓝主题五 · 清爽阅读
首页  > 故障排查

PHP脚本错误排查实用指南

开启错误显示是第一步

开发过程中,最怕的就是页面一片空白,啥也不报。这时候先检查 php.ini 是否开启了错误提示。把 display_errors 设为 On,error_reporting 调到 E_ALL,让所有问题都暴露出来。

也可以在脚本开头临时加上:

ini_set('display_errors', 1);
ini_set('error_reporting', E_ALL);

这样不用改配置就能看到报错信息,适合本地调试。

常见错误类型和对应处理

语法错误是最基础的,比如少了个分号、括号没闭合。PHP 解析时会直接报 Parse error。这种通常一运行就崩,错误信息会明确告诉你哪一行出问题。

举个例子:

$name = '小李'
echo 'Hello ' . $name;

上面这段代码第二行前面漏了分号,执行就会报错。补上就行。

变量未定义或拼写错误

有时候页面没按预期输出,可能是变量名打错了。比如本来要输出 $username,结果手滑写成 $usernmae,PHP 会提示 Undefined variable。

这类问题用 IDE 高亮一眼就能发现。实在不行加个 isset 判断兜底:

if (isset($username)) {
echo $username;
} else {
echo '用户名不存在';
}

数组索引不存在

从数据库取数据后遍历展示,突然报 Notice: Undefined index。这种情况太常见了,特别是前端传参不全的时候。

别急着改逻辑,先打印 $_POST 或 $_GET 看看有没有传过来:

var_dump($_POST);

确认数据到了再往下查。访问数组前用 array_key_exists 或 isset 判断一下更稳妥。

利用日志定位深层问题

生产环境不能随便开 display_errors,用户看见一堆红字肯定吓一跳。这时候得靠日志。确保 log_errors 开启,并指定 error_log 文件路径。

比如某个定时任务跑着跑着就停了,去日志里翻一翻:

[05-Apr-2025 14:23:01 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function do_something() in /www/cron.php:12

一看就知道是函数没定义,可能是文件没 include 进来。

内存不足或超时

处理大批量数据时,脚本卡住不动,可能是因为内存耗尽或者执行时间太长。可以临时调高限制:

ini_set('memory_limit', '512M');
ini_set('max_execution_time', 300);

但这只是治标,真正要做的是优化逻辑,比如分批处理数据,避免一次性加载太多。

善用调试工具

单靠 var_dump 和 echo 打印效率太低。Xdebug 搭配 PhpStorm 能设断点一步步跟,特别适合复杂流程。

安装好 Xdebug 后,在 php.ini 加上:

zend_extension=xdebug.so
xdebug.mode=debug
xdebug.start_with_request=yes

然后用浏览器插件触发调试,就能连上本地环境逐步排查。

如果服务器没法装扩展,可以用 debug_backtrace() 查调用栈,看看是哪个环节出了问题。

权限和路径问题别忽视

上传文件失败、写日志没反应,很多时候不是代码问题,而是目录没写权限。比如 Linux 下 www-data 用户运行 PHP,目标目录得给它读写权限。

还有路径问题,相对路径在不同入口文件下可能指向不一样。建议统一用 __DIR__ 来拼绝对路径:

$configFile = __DIR__ . '/../config/database.php';

这样不管从哪个脚本调用,路径都正确。