PHP日志报错怎么办Ubuntu系统
小樊
42
2025-11-30 03:23:40
Ubuntu下PHP日志报错排查与修复
一、快速定位日志位置
- 先确认你的运行环境(Apache/Nginx + PHP-FPM 或 mod_php),再到对应位置查看。常见路径如下:
- Apache:Web服务错误日志在 /var/log/apache2/error.log;PHP自身的错误是否写入该文件,取决于PHP配置。
- Nginx:Web服务错误日志在 /var/log/nginx/error.log;PHP-FPM的错误通常不在该文件中。
- PHP-FPM:常见路径为 /var/log/php-fpm.log 或 /var/log/php7.x-fpm.log(将 7.x 替换为你的PHP版本)。
- 自定义日志:若 php.ini 中设置了 error_log,则按该路径查看。
- 实时查看最新日志(示例):
- 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
- 不确定日志位置时,可用以下方式确认:
- 执行 php --ini 查看加载的 php.ini;
- 在 Web 环境内创建 phpinfo.php 并访问,搜索 error_log 项获取实际路径。
二、让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(确保目录可写)
- 生产建议:设置 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.conf 或 www.conf 中的 error_log 配置是否开启并指向有效路径。
三、常见报错场景与处理
- 语法错误或致命错误导致空白页:查看 Apache/Nginx 错误日志与 PHP-FPM 日志中的具体文件与行号,先修正语法或依赖问题。
- 类/函数未定义或扩展缺失:日志会提示 Call to undefined function 或 Class ‘…’ not found,安装对应扩展(如 php-mbstring、php-curl、php-gd 等),然后重启服务。
- 权限与所有权问题:确保 Web 服务用户对代码目录有读取权限,对需要写入的目录有写权限,例如:
- 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 exhausted 或 Maximum execution time exceeded 时,在 php.ini 调整 memory_limit、max_execution_time 等参数并重启。
- 配置错误:修改 php.ini 或 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 -m | grep -i mbstring
- 重启服务:
- sudo systemctl restart apache2
- sudo systemctl restart php7.4-fpm
- sudo systemctl restart nginx
五、实用建议
- 生产环境务必 display_errors = Off、log_errors = On,避免泄露敏感信息;开发环境可临时开启显示错误便于调试。
- 使用 phpinfo() 或 php --ini 双重确认实际生效的 php.ini 与 error_log 路径,避免改错文件。
- 若采用 PHP-FPM,同时检查 FPM 主配置与进程池配置中的 error_log 与日志级别,必要时提高 log_level = notice/debug 以获取更详细日志(排查完记得调回)。
- 修改配置或扩展后,养成 重启服务并观察日志 的习惯,确保变更生效且无新报错。