PHP错误日志批量排查网站白屏502访问故障完整流程
PHP错误日志批量排查网站白屏502访问故障完整流程
网站突然白屏或返回 502 Bad Gateway,对新手站长来说最头疼。
绝大多数情况是 PHP-FPM 崩溃、内存耗尽或代码错误引起的。
本文带你从零开始,用 PHP 错误日志 逐站筛查,定位问题根源,并给出修复思路。
排查前先确认两件事
- 你能登录服务器吗? 至少要有 SSH 密码或密钥,或者能进宝塔面板/服务器管理后台。
- 网站是 PHP 程序吗? 如果用了 WordPress、Discuz、Laravel 等,日志排查特别有效。502 白屏一般来自 PHP 进程挂掉或配置错误。
第一步:确保各站已经开启错误日志
很多服务器默认关闭 PHP 错误输出。
我们要先让错误“写出来”。
方法一:修改 php.ini(全局生效)
找到 php.ini 文件位置(常见路径 /etc/php.ini 或 /etc/php/7.x/fpm/php.ini),修改或确认以下参数:
display_errors = Off
log_errors = On
error_log = /var/log/php-fpm/error.log
error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED
注意:生产环境建议 display_errors = Off,避免错误直接暴露给用户。
方法二:宝塔面板一键开启
宝塔用户更简单:登录面板 → 网站 → 选择站点 → 设置 → 伪静态/配置 → 在“PHP 配置”中开启“错误日志”,路径自动生成。
每个站点可独立设置。
第二步:批量查看所有站点的 PHP 错误日志
场景一:只有一个站点
直接查看全局日志:
# 如果日志路径是默认的
tail -f /var/log/php-fpm/error.log
如果要看指定站点的日志(宝塔一般按日期拆分):
# 宝塔站点日志位置
tail -f /www/wwwlogs/你的域名.error.log
场景二:服务器上有几十个站点
用一行命令扫描所有错误日志:
# 找到所有 .error.log 文件并显示最后 20 行
grep -rn "Fatal error\|PHP Parse error\|PHP Warning" /www/wwwlogs/*.error.log 2>/dev/null | tail -50
如果日志名称不统一,可以用 find 结合 xargs:
find /www/wwwlogs -name "*.error.log" -exec grep -H -i "error\|fatal" {} \;
输出解读:常见关键词包括 PHP Fatal error(致命错误)、Allowed memory size(内存超限)、Uncaught exception(未捕获异常)。
第三步:根据日志内容修复白屏/502
常见错误及对策
| 日志关键词 | 可能原因 | 修复方法 |
|-----------|----------|----------|
| PHP Fatal error: Allowed memory size of XXX bytes exhausted | 单脚本内存不足 | 修改 php.ini 中 memory_limit 为 256M 或更高,重启 PHP-FPM |
| PHP Parse error: syntax error, unexpected T_STRING | 代码语法错误 | 检查最近修改的 PHP 文件,用 php -l 文件名.php 验证语法 |
| PHP Fatal error: Uncaught Error: Class 'XXX' not found | 缺少类文件 | 检查自动加载配置或手动引入 |
| [error] 209#0: *12345 connect() failed (111: Connection refused) | PHP-FPM 没启动 | 重启 PHP-FPM:systemctl restart php-fpm(或宝塔面板 → 服务 → PHP 重启) |
| [error] 209#0: *12345 connect() timed out | PHP 处理超时 | 扩大 request_terminate_timeout 或 max_execution_time |
批量修复技巧
假如所有站点都报 Allowed memory size,直接修改 php.ini 全局值:
sed -i 's/memory_limit = 128M/memory_limit = 256M/' /etc/php.ini
systemctl restart php-fpm
如果只有个别站,优先改站点同名 .user.ini 文件(宝塔网站目录下)。
高频问题与避坑说明
Q1:日志文件为空怎么办?
检查权限:ls -la /var/log/php-fpm/,确保用户 www 或 nginx 有写权限。
也可以手动创建并授权:
touch /var/log/php-fpm/error.log
chown www:www /var/log/php-fpm/error.log
Q2:开启日志后网站性能会下降吗?
日志写入会产生少量 I/O,生产环境建议只记录 error 级别,关闭 display_errors。
排查结束后可以恢复 error_reporting 为更严格的值。
Q3:改完配置还是 502?
很可能 Nginx 跟 PHP-FPM 之间的 socket 或端口不对。
检查 Nginx 配置中的 fastcgi_pass 是否与你启用的 PHP-FPM 版本一致。
例如宝塔默认用 Unix socket /tmp/php-cgi-74.sock,但你的 PHP 版本是 8.0,就会报错。
验证修复效果
- 先清空错误日志:
> /var/log/php-fpm/error.log - 刷新白屏页面,重复操作两三次。
- 再次查看日志:
tail -20 /var/log/php-fpm/error.log,如果无新增错误,访问恢复正常,说明问题已解决。 - 如果是全局配置问题,务必在验证后恢复
display_errors = Off。
总结
批量排查网站白屏 502 的核心武器就是 PHP 错误日志。
按本文步骤先开启日志、扫一遍所有站点、根据关键词修,基本能解决 80% 以上的故障。
遇到复杂情况(如扩展冲突、SELinux 拦截),可以结合 Nginx 错误日志(/var/log/nginx/error.log)交叉对比。
如果你正在处理 PHP 错误日志批量排查网站白屏 502 访问故障完整流程,建议先按以上步骤完整执行,再根据自己环境做微调;
遇到异常时优先回看避坑和高频问题部分。