开启错误显示是第一步
开发过程中,最怕的就是页面一片空白,啥也不报。这时候先检查 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';这样不管从哪个脚本调用,路径都正确。