1. 定位PHP错误日志文件
在CentOS系统中,PHP错误日志的位置取决于Web服务器和PHP运行模式(如PHP-FPM、Apache模块、Nginx FastCGI)。常见路径包括:
/var/log/php-fpm/error.log(默认路径,需确认php-fpm.conf或池配置中的error_log设置);/var/log/httpd/error_log(默认路径,需检查httpd.conf或虚拟主机配置中的ErrorLog指令);/var/log/nginx/error.log(默认路径,需检查Nginx配置中的error_log指令)。php.ini中的error_log设置:php --ini # 找到加载的php.ini文件路径
grep "error_log" /etc/php.ini # 查看error_log配置项
此外,也可通过journalctl查看PHP-FPM的systemd日志:
journalctl -u php-fpm -n 50 --no-pager # 查看最近50条PHP-FPM日志
2. 查看与过滤错误日志
使用命令行工具实时查看或搜索日志中的错误信息:
sudo tail -f /var/log/php-fpm/error.log # 替换为实际日志路径
sudo grep -i "error" /var/log/php-fpm/error.log # 不区分大小写搜索
sudo grep -i "fatal" /var/log/php-fpm/error.log
sudo less /var/log/php-fpm/error.log # 使用less可上下翻页,按q退出
3. 常见错误类型及解决方法
根据日志中的错误信息,针对性解决以下常见问题:
Parse error: syntax error, unexpected '}'):on line 45)定位代码位置,检查语法结构是否正确。Call to undefined function mysqli_connect()或Undefined variable: db_host):
mysqli扩展)。解决方法:检查函数名是否正确;编辑php.ini启用扩展(如extension=mysqli.so),然后重启PHP-FPM:sudo systemctl restart php-fpm。$db_host = "localhost";),或检查变量名拼写。Warning: mysqli_connect(): (HY000/2002): No such file or directory):php.ini或应用配置文件中的数据库连接信息(如host、port、username、password);确认数据库服务状态(如MySQL:sudo systemctl status mysqld),若未运行则启动:sudo systemctl start mysqld。Warning: fopen(/var/www/html/logs.txt): failed to open stream: Permission denied):apache或nginx用户)无权访问目标文件/目录。解决方法:修改文件/目录权限(如sudo chmod 755 /var/www/html/logs.txt)或所有权(如sudo chown apache:apache /var/www/html/logs.txt,根据实际Web用户调整)。Fatal error: Allowed memory size of 134217728 bytes exhausted):memory_limit设置。解决方法:编辑php.ini,增加memory_limit值(如memory_limit = 256M),然后重启PHP-FPM或Web服务器。4. 调整PHP错误报告配置
为确保错误能正确记录到日志中,需调整php.ini中的以下设置:
error_reporting = E_ALL # 报告所有错误(开发环境建议开启,生产环境可调整为E_ALL & ~E_NOTICE)
display_errors = Off # 生产环境关闭屏幕显示(避免泄露敏感信息)
log_errors = On # 开启日志记录
error_log = /var/log/php-fpm/error.log # 指定日志文件路径(需与Web服务器配置一致)
修改后,重启PHP-FPM或Web服务器使配置生效:
sudo systemctl restart php-fpm # 若使用PHP-FPM
sudo systemctl restart httpd # 若使用Apache
sudo systemctl restart nginx # 若使用Nginx
5. 重启相关服务
无论是修改配置文件(如php.ini、httpd.conf)还是修复代码,都需要重启对应服务以使更改生效:
sudo systemctl restart php-fpmsudo systemctl restart httpdsudo systemctl restart nginxsudo systemctl status php-fpm),避免因服务未启动导致错误持续存在。