1. 查看PHP错误日志(最直接有效的排查方式)
PHP错误日志会记录脚本运行时的详细错误信息(如语法错误、致命错误、警告等),是定位问题的核心线索。
php.ini配置文件查看(需root权限),命令:sudo grep -i "error_log" /etc/php.ini,输出结果即为日志路径(如/var/log/php-fpm/error.log或/var/log/apache2/error.log)。phpinfo()函数查看,在任意PHP文件中添加<?php phpinfo(); ?>,用浏览器访问该文件,搜索“error_log”即可看到当前生效的日志路径。tail命令实时跟踪日志更新(适用于调试时),例如:sudo tail -f /var/log/php-fpm/error.log(替换为实际日志路径),新产生的错误会实时显示在终端。sudo mkdir -p /var/log/php-fpm && sudo chown www-data:www-data /var/log/php-fpm,其中www-data为Web服务器用户,根据实际情况调整)。2. 启用PHP错误显示(开发环境专用)
生产环境务必关闭此功能(避免泄露敏感信息),仅在开发调试时使用。
php.ini配置:php.ini中的以下参数,修改为:display_errors = On(开启错误显示)display_startup_errors = On(开启启动错误显示)error_reporting = E_ALL(报告所有错误级别,包括提示、警告、致命错误等)。sudo systemctl restart apache2sudo systemctl restart nginx(若使用PHP-FPM,还需重启php-fpm服务:sudo systemctl restart php-fpm)。php.ini,可在PHP脚本开头添加以下代码,强制开启错误显示:<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
?>
3. 检查代码语法错误(快速定位明显问题)
语法错误是最常见的PHP错误类型,可通过内置工具快速检测。
php -l命令:在终端中输入php -l 文件名.php(如php -l index.php),命令会检查文件语法并返回结果。若有错误,会提示错误位置(如“Parse error: syntax error, unexpected ‘;’ in index.php on line 10”)。4. 验证文件权限与所有权(避免访问拒绝)
PHP脚本及相关文件(如配置文件、上传目录、依赖库)的权限设置不当,会导致“Permission denied”或“File not found”错误。
644(所有者可读写,组和其他用户只读),命令:sudo chmod 644 文件名.php。755(所有者可读写执行,组和其他用户可读执行),命令:sudo chmod 755 目录名/。775或777(谨慎使用777,建议限制为特定用户),命令:sudo chmod 775 uploads/。www-data、apache或nginx),命令:sudo chown www-data:www-data 文件名.php(替换为实际用户和组)。5. 确认PHP配置正确性(避免配置冲突)
错误的配置会导致PHP无法正常运行(如扩展未加载、时区设置错误、内存限制过低)。
php.ini配置:
extension_dir参数指向正确的扩展目录(如/usr/lib/php/20230831/),并确保所需扩展(如mysqli、gd、opcache)已启用(取消注释extension=mysqli.so)。date.timezone参数设置为有效时区(如Asia/Shanghai),避免“date(): It is not safe to rely on the system’s timezone settings”错误。memory_limit参数足够大(如256M或512M),避免脚本因内存不足而终止。php.ini后,需重启PHP服务(如php-fpm)和Web服务(如Apache/Nginx),例如:sudo systemctl restart php-fpm && sudo systemctl restart apache2。6. 检查依赖库与扩展(避免功能缺失)
PHP脚本依赖的扩展或库未安装,会导致“Call to undefined function”错误(如“Call to undefined function mysqli_connect()”)。
php -m命令列出当前加载的PHP扩展,确认所需扩展(如mysqli、gd、curl)是否在列表中。sudo apt-get install php-扩展名(如sudo apt-get install php-mysqli)。sudo yum install php-扩展名(如sudo yum install php-mysqli)。php-fpm和Web服务使扩展生效。composer install安装依赖,并确保vendor目录存在且可访问。7. 使用调试工具(深度排查复杂问题)
对于复杂的逻辑错误(如变量值异常、流程跳转问题),可使用调试工具逐步分析。
sudo apt-get install php-xdebug),或在php.ini中添加Xdebug配置(参考Xdebug官方文档)。php.ini中设置xdebug.mode=debug、xdebug.start_with_request=yes,并指定IDE key(如xdebug.idekey=PHPSTORM)。set_error_handler),将错误信息记录到指定文件或发送通知(如邮件),便于后续分析。