PHP错误日志排查教程指南实用
为什么你的 PHP 网站突然白屏了?
刚搭建的 WordPress 或个人网站突然白屏,或者访问时直接弹出 500 内部服务器错误,很多人第一反应是“完了,网站废了”。
其实大多数情况下,只要找到 PHP错误日志,就能立刻知道问题出在哪一行代码。
本文会一步一步告诉你如何开启、查看并读懂这些日志,不需要你有编程基础,跟着操作就能自己排错。
如果你用的是宝塔面板、LNMP 或者纯手工配置的环境,下面的步骤都适用。
第一步:找到 PHP 配置文件并开启日志
PHP 的错误日志记录功能默认是关闭的,所以第一步就是把它打开。
1.1 找到 php.ini 文件
不同的服务器环境,php.ini 位置可能不同:
- 宝塔面板:在左侧菜单“软件商店” → 你使用的 PHP 版本(如 PHP 7.4) → “设置” → “配置文件” → 直接编辑
php.ini。 - LNMP 一键包:通常在
/usr/local/php/etc/php.ini。 - 自行编译安装:通过
php --ini命令查看加载的配置文件路径。
1.2 修改关键配置项
用文本编辑器打开 php.ini,找到下面几行(如果没有就手动添加),修改或确认以下值:
error_reporting = E_ALL
log_errors = On
error_log = /var/log/php_errors.log
display_errors = Off
error_reporting:设为E_ALL表示记录所有级别的错误。log_errors:开启错误日志记录。error_log:日志文件的保存路径。宝塔面板建议放在/www/wwwlogs/下,例如/www/wwwlogs/php_errors.log,确保目录可写。display_errors:生产环境务必设为Off,否则错误信息会直接显示在网页上,暴露敏感信息。
1.3 重启 PHP 服务
修改后必须重启 PHP 才能生效。
- 宝塔面板:在“软件商店”对应 PHP 版本右侧点击“重启”。
- 命令行:
systemctl restart php-fpm(如果服务名是 php-fpm,也可能是php7.4-fpm)。
第二步:查看 PHP 错误日志
2.1 实时查看最新日志(推荐)
登录服务器 SSH,使用 tail 命令:
tail -f /var/log/php_errors.log
然后刷新一次出错的网页,终端会立即打印最新的错误信息。
按 Ctrl + C 退出实时模式。
2.2 使用宝塔面板查看
宝塔用户可以直接在左侧“日志” → “PHP错误日志”中查看,也可以进入网站设置 → “网站日志” → 选择对应 PHP 版本日志。
2.3 没有日志怎么办?
如果日志文件为空,请检查:
error_log指定的目录是否存在且 PHP 用户(如www)有写入权限。- 确认刚重启过 PHP。
- 临时在 php.ini 中添加
display_errors = On并重启,访问出错页面看能否直接看到错误,但生产环境测试完一定要改回Off。
第三步:解读常见的 PHP 错误类型
看到日志后,重点看行号和错误级别。
3.1 Parse error(解析错误)
PHP Parse error: syntax error, unexpected '}' in /www/wwwroot/test.php on line 10
通常是因为代码遗漏了分号、括号不匹配。
找到第10行附近检查语法。
3.2 Fatal error(致命错误)
PHP Fatal error: Uncaught Error: Call to undefined function wp_head() in /www/wp-content/themes/functions.php:15
表示调用了不存在的函数或类,常见于插件、主题冲突。
3.3 Warning(警告)
PHP Warning: file_get_contents(http://example.com): failed to open stream...
警告不会中断程序,但通常提示配置或外部资源问题,比如 PHP 远程连接被禁用。
避坑指南:几个新手容易忽略的点
- 日志文件权限:宝塔环境下,日志路径建议使用
/www/wwwlogs/,并确保 PHP 用户(www)有写入权限。如果日志文件一直空白,可以手动创建一个空文件并设置为 666 权限:chmod 666 /www/wwwlogs/php_errors.log。 - 日志轮转:不设置轮转的话,日志文件会越来越大,甚至撑爆磁盘。宝塔面板会自动处理,手动环境可以用
logrotate定期切割。 - 生产环境严禁 display_errors:开启后错误会直接输出到页面,可能泄露数据库密码、服务器路径等敏感信息。测试完一定记得关掉。
验证:制造一个简单错误确认日志生效
写一个最简单的测试文件,比如在网站根目录创建 test.php,内容如下:
访问 http://yourdomain.com/test.php(页面不会显示任何信息,因为 display_errors 已关)。
然后查看日志文件,应该会看到:
PHP Notice: Undefined variable: undefined_var in /www/wwwroot/test.php on line 2
这说明日志已正常工作。记得删除测试文件,避免被别人利用。
高频问题解答
Q:为什么我的日志里什么都没有?
A:检查 php.ini 中 log_errors 是否为 On,error_log 路径是否正确,目录是否可写,以及是否重启了 PHP。
Q:错误日志里出现大量重复信息怎么办?
A:可以利用 logrotate 设置日志轮转,或者临时提高错误报告级别过滤掉 Notice 级别信息。
Q:日志显示文件不存在但文件明明存在?
A:检查 PHP 的 open_basedir 限制是否限制了路径。
可以在 php.ini 中注释掉该选项或添加允许路径。
总结
现在你已经掌握了 PHP错误日志排查 的核心步骤:找到配置文件、开启日志、查看日志、读懂错误类型。
下次网站出问题,不要盲目删插件,先看日志。
如果你正在处理 PHP 错误日志排查,建议先按本文步骤完整执行,再根据自己的环境做微调;
遇到异常时优先回看避坑和高频问题部分。
坚持下去,你很快就能独立解决大部分服务器排错问题。