分析 PHP 日志错误是排查线上或本地环境问题的关键步骤。下面从日志位置、常见错误类型、分析方法、实战技巧几个方面系统说明。
常见位置取决于运行环境:
/var/log/php-fpm/error.log
/var/log/php8.x-fpm.log
/var/log/apache2/error.log
/var/log/httpd/error_log
/var/log/nginx/error.log
/var/log/php-fpm/error.log
error_log = /var/log/php_errors.log
查看当前生效配置:
php -i | grep error_log
在 php.ini 中:
error_reporting = E_ALL
display_errors = Off
log_errors = On
✅ 生产环境建议
display_errors = Offlog_errors = OnParse error: syntax error, unexpected ';'
✅ 原因:代码语法错误
✅ 特点:脚本直接终止
Fatal error: Call to undefined function xxx()
✅ 原因:调用不存在的函数、类、方法
✅ 脚本终止
Warning: include(xxx.php): failed to open stream
✅ 不会终止脚本
✅ 通常是路径、权限问题
Notice: Undefined index: user_id
✅ 变量未定义
✅ 常见于数组、表单数据
Deprecated: Function xxx() is deprecated
✅ 新版本 PHP 不推荐使用
[10-Oct-2024 14:32:10 UTC]
确认是否和异常发生时间一致。
PHP Fatal error: Uncaught Error: Class 'User' not found in /var/www/app/Index.php:45
重点看:
require 'User.php';
$user = new User();
常见问题:
Stack trace:
#0 /var/www/app/Index.php(45)
#1 /var/www/app/bootstrap.php(20)
✅ 从下往上看更容易理解调用链路
failed to open stream: No such file or directory
✅ 检查:
Permission denied
✅ 检查:
ls -l 文件
ps aux | grep php
Allowed memory size exhausted
✅ 解决:
memory_limit = 256M
Maximum execution time exceeded
✅ 解决:
max_execution_time = 120
SQLSTATE[HY000] [2002] Connection refused
✅ 检查:
tail -f /var/log/php-fpm.log
grep -i fatal /var/log/php-fpm.log
grep -i "undefined" /var/log/php_errors.log
error_log('User ID: ' . $userId);
error_log(print_r($data, true));
$log->error('Order failed', [
'order_id' => $id,
'error' => $e->getMessage()
]);
找到日志
↓
确认错误类型
↓
定位文件 & 行号
↓
查看上下文代码
↓
结合请求参数 / 数据库 / 第三方接口
↓
修复 & 复现验证
如果你愿意,可以把具体的一段 PHP 错误日志贴出来,我可以帮你逐行分析并给出修复方案。