Ubuntu下PHP错误调试全流程指南
PHP错误通常会被记录到系统日志文件中,优先通过日志获取错误详情:
/var/log/apache2/error.log,使用tail命令实时查看最新错误:sudo tail -f /var/log/apache2/error.log
/var/log/nginx/error.log,同样用tail命令监控:sudo tail -f /var/log/nginx/error.log
/var/log/php-fpm.log或/var/log/php7.x-fpm.log(x为PHP版本号),查看命令同上。为了让浏览器直接显示错误信息(方便快速调试),需修改PHP配置:
<?php
ini_set('display_errors', 1); // 开启错误显示
error_reporting(E_ALL); // 报告所有类型错误(包括Notice、Warning、Fatal Error)
?>
php.ini文件路径(通过php --ini命令获取,如/etc/php/8.2/apache2/php.ini);nano)打开文件,修改以下配置:display_errors = On # 开启错误显示
error_reporting = E_ALL # 报告所有错误
log_errors = On # 同时记录错误到日志(避免丢失)
error_log = /var/log/php_errors.log # 自定义日志路径(可选)
sudo systemctl restart apache2sudo systemctl restart php8.2-fpm && sudo systemctl restart nginxXdebug是PHP专业调试神器,支持断点调试、变量监控、调用栈分析等功能:
sudo apt-get install php-xdebug # Ubuntu默认仓库安装
php.ini文件,添加以下配置(根据PHP版本调整zend_extension路径):zend_extension=xdebug.so # 加载Xdebug扩展
xdebug.remote_enable=1 # 开启远程调试
xdebug.remote_host=localhost # 调试客户端地址(本地为localhost)
xdebug.remote_port=9003 # 调试端口(默认9003,避免与其它服务冲突)
xdebug.remote_handler=dbgp # 调试协议
xdebug.remote_autostart=1 # 自动启动调试(无需手动触发)
xdebug.idekey=PHPSTORM # IDE标识(如PHPStorm、VSCode)
File > Settings > Languages & Frameworks > PHP > Servers,点击+添加服务器;Name(如Local),Host为localhost,Port为80(HTTP端口),勾选Use path mappings;/var/www/html映射到项目根目录);Run > Start Listening for PHP Debug Connections,在代码中设置断点,刷新浏览器即可启动调试。PHP无法访问脚本或文件时,会导致“Permission Denied”错误,需调整权限:
www-data):sudo chown -R www-data:www-data /path/to/your/php/files
755,文件权限设为644):sudo chmod -R 755 /path/to/your/php/files
sudo find /path/to/your/php/files -type f -exec chmod 644 {} \;
phpinfo()函数查看当前PHP配置(创建info.php文件,内容为<?php phpinfo(); ?>,通过浏览器访问),确认display_errors、error_reporting等设置已生效;mbstring、gd),用以下命令安装:sudo apt-get install php-mbstring php-gd # 根据错误提示替换扩展名
sudo systemctl restart apache2/nginx/php-fpm # 重启服务使扩展生效
display_errors(设为Off),避免敏感信息泄露,仅通过日志记录错误;logrotate工具),避免日志文件过大占用磁盘空间;php -v查看当前版本。