centos下php错误怎么排查
小樊
45
2025-11-15 19:20:49
CentOS 下 PHP 错误排查步骤
一 定位日志位置
- 先确认 PHP 运行方式(PHP-FPM 或 mod_php/Apache),再到对应位置查看日志。常见路径如下:
- PHP-FPM:查看 /var/log/php-fpm/error.log(FPM 进程自身错误、脚本异常等)。
- Apache:查看 /var/log/httpd/error_log(Apache 启动/连接错误、PHP 解析错误等)。
- Nginx:查看 /var/log/nginx/error.log(FastCGI 转发、权限/上游错误等)。
- 不确定日志路径时,用命令定位配置文件并查看 error_log 项:
- 查找配置文件:php --ini
- 在 php.ini 或 /etc/php.d/*.ini 中搜索:error_log
- 也可通过 systemd 查看服务日志:
- PHP-FPM:journalctl -u php-fpm -f
- Apache:journalctl -u httpd -f
- Nginx:journalctl -u nginx -f
- 线上环境建议开启文件日志并关闭浏览器显示:log_errors = On、display_errors = Off,将错误写入到明确的 error_log 文件。
二 开启与验证错误报告
- 临时在入口脚本或 Web 环境开启(便于立即看到错误):
- ini_set(‘display_errors’, 1);
- ini_set(‘display_startup_errors’, 1);
- error_reporting(E_ALL);
- 持久化到配置文件(推荐):编辑 php.ini 或相应子配置(如 /etc/php.d/zz-debug.ini)
- 开发环境示例:
- error_reporting = E_ALL
- display_errors = On
- display_startup_errors = On
- log_errors = On
- error_log = /var/log/php_errors.log
- 生产环境建议:display_errors = Off,仅保留 log_errors = On 与明确的 error_log。
- 修改后重启服务使配置生效:
- PHP-FPM:systemctl restart php-fpm
- Apache:systemctl restart httpd
- Nginx:systemctl restart nginx
- 验证是否生效:
- 执行 php -v 或访问一个肯定会触发错误的脚本,确认日志有新条目。
三 常见错误与快速处理
- 语法错误:PHP 启动或访问即报错,日志会给出文件名与行号。处理:修正语法、检查短标签与编码。
- 扩展缺失:如提示 Class ‘mysqli’ not found,安装对应扩展(示例):sudo yum install php-mysqli,然后重启服务。
- 权限问题:日志含 Permission denied。处理:确认 PHP 进程用户对文件/目录有读/写/执行权限,必要时调整 owner/group 与 mode。
- 数据库连接失败:检查 主机/端口/用户/密码 与数据库服务状态,确认防火墙与 SELinux 策略允许访问。
- 内存不足:日志含 Allowed memory size exhausted。处理:在 php.ini 提升 memory_limit(如 128M/256M),再重启服务。
- 配置错误:修改 php.ini 或 FPM/Web 配置后未生效,多为未重启或包含路径错误;重启并检查包含目录 /etc/php.d/ 是否被主配置加载。
四 进阶调试与工具
- 使用 Xdebug 进行断点、单步、变量观察等深度调试:
- 安装(示例):sudo yum install php-xdebug
- 在 php.ini 或 /etc/php.d/xdebug.ini 添加:
- zend_extension=xdebug.so
- xdebug.mode=debug
- xdebug.client_host=127.0.0.1
- xdebug.client_port=9003
- xdebug.start_with_request=yes
- 重启服务,并在 PhpStorm/VS Code 配置调试客户端监听 9003 端口进行联动。
- 使用 strace/ltrace 定位系统调用或库调用问题(仅在必要时使用,避免生产环境性能影响)。
五 排查清单与命令速查
- 快速命令清单:
- 查看日志:tail -f /var/log/php-fpm/error.log
- 查找关键字:grep -i “error” /var/log/php-fpm/error.log
- 定位配置:php --ini
- 服务日志:journalctl -u php-fpm -f
- 重启服务:systemctl restart php-fpm / httpd / nginx
- 配置核对清单:
- error_reporting=E_ALL
- display_errors(开发:On;生产:Off)
- log_errors=On 且 error_log 指向可写路径
- 修改后务必重启相关服务
- 安全提示:
- 生产环境不要开启 display_errors,避免泄露敏感信息;确保 error_log 文件权限最小化且定期轮转。