Ubuntu下PHP日志报错排查与修复

一、快速定位日志位置

二、让PHP把错误写到日志

  • 编辑对应 SAPI 的 php.ini(路径示例:/etc/php/7.x/apache2/php.ini/etc/php/7.x/fpm/php.ini),需要修改以下几项:
    • 开启日志log_errors = On
    • 指定日志文件error_log = /var/log/php_errors.log(要确保目标目录对 Web 用户可写)
    • 生产环境建议display_errors = Off;开发环境可以临时设为 On 方便调试。
    • 报告级别error_reporting = E_ALL ,把能报的错误都报出来。
  • 改完配置后,一定要重启对应的服务才能生效:
    • Apache:sudo systemctl restart apache2
    • Nginx + PHP-FPM:sudo systemctl restart php7.x-fpm && sudo systemctl restart nginx
  • 如果用的是 PHP-FPM,还需要检查 /etc/php/7.x/fpm/php-fpm.confwww.conf 中的 error_log 配置是否开启并且指向了有效路径。很多人只改了 php.ini,却忘了 FPM 自身的日志配置,结果依然看不到报错。

三、常见报错场景与处理

  • 语法错误或致命错误导致空白页:这种情况最头疼——页面一片空白,连个错误提示都没有。去 Apache/Nginx 错误日志或 PHP-FPM 日志里,会明确告诉你哪个文件、哪一行出了问题。先修正语法或解决依赖问题。
  • 类/函数未定义或扩展缺失:日志里会出现 Call to undefined functionClass '…' not found。对应的解决办法是安装缺失的扩展,比如 php-mbstringphp-curlphp-gd 等,装完别忘了重启服务。
  • 权限与所有权问题:确保 Web 服务用户(通常是 www-data)对代码目录有读取权限,对需要写入的目录(比如上传、缓存目录)有写权限。一个经典的操作组合:
    • sudo chown -R www-data:www-data /var/www/html
    • sudo find /var/www/html -type d -exec chmod 755 {} ;
    • sudo find /var/www/html -type f -exec chmod 644 {} ;
  • 资源限制(内存、执行时间):日志中间出现 Allowed memory size exhaustedMaximum execution time exceeded 时,打开 php.ini,调大 memory_limitmax_execution_time 这两个参数,然后重启。
  • 配置错误:修改了 php.ini 或 FPM 池配置后,服务可能直接起不来。这种情况优先去看对应的启动日志(比如 journalctl -u php7.4-fpm),找到具体的错误信息,修正后再启动。

四、高效排查命令清单

  • 实时跟踪错误
    • sudo tail -f /var/log/apache2/error.log
    • sudo tail -f /var/log/nginx/error.log
    • sudo tail -f /var/log/php7.4-fpm.log
  • 检索关键字(比滚动看日志快得多):
    • grep -i "error|fatal|warning" /var/log/php_errors.log
  • 确认配置与扩展
    • php --ini 查看当前加载的 php.ini
    • php -m | grep -i mbstring 检查某个扩展是否已启用
  • 重启服务
    • sudo systemctl restart apache2
    • sudo systemctl restart php7.4-fpm
    • sudo systemctl restart nginx

五、实用建议

  • 生产环境务必坚持 display_errors = Offlog_errors = On,避免敏感信息泄露到页面上。开发环境可以临时打开显示错误,方便调试。
  • phpinfo()php --ini 双重确认实际生效的 php.inierror_log 路径,避免辛辛苦苦改错了文件。
  • 如果采用 PHP-FPM,同时检查 FPM 主配置和进程池配置中的 error_log 与日志级别。必要时把 log_level 临时调到 noticedebug,获取更详细的信息(排查完记得调回默认值)。
  • 修改配置或安装扩展后,养成习惯:重启服务并马上观察日志,确认变更生效且没有产生新的报错。这一步很多人嫌麻烦跳过了,结果排查了半天发现配置根本没加载。
本文转载于:https://www.yisu.com/ask/56479186.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。