在 Ubuntu 上排查 PHP 错误,通常可以从错误日志、PHP 配置、Web 服务器日志三个方面入手。下面按常见场景给你一个系统排查指南。
先找到 php.ini 位置:
php --ini
或(Apache/Nginx 常用):
php -i | grep "Loaded Configuration File"
编辑对应文件:
sudo nano /etc/php/8.1/cli/php.ini
# 或
sudo nano /etc/php/8.1/apache2/php.ini
修改以下项:
display_errors = On
display_startup_errors = On
error_reporting = E_ALL
log_errors = On
重启服务:
# Apache
sudo systemctl restart apache2
# Nginx + PHP-FPM
sudo systemctl restart php8.1-fpm
sudo systemctl restart nginx
log_errors = On
error_log = /var/log/php/php_errors.log
如果未设置,可手动指定:
error_log = /var/log/php/php_errors.log
创建日志文件并授权:
sudo mkdir -p /var/log/php
sudo touch /var/log/php/php_errors.log
sudo chown www-data:www-data /var/log/php/php_errors.log
查看日志:
tail -f /var/log/php/php_errors.log
sudo tail -f /var/log/apache2/error.log
sudo tail -f /var/log/nginx/error.log
sudo tail -f /var/log/php8.1-fpm.log
直接运行:
php your_script.php
查看 CLI 错误:
php -l your_script.php # 语法检查
| 错误类型 | 含义 |
|---|---|
| Parse error | 语法错误 |
| Fatal error | 严重错误(类/函数不存在) |
| Warning | 非致命警告 |
| Notice | 提示级错误(变量未定义等) |
在代码中临时输出错误:
error_reporting(E_ALL);
ini_set('display_errors', 1);
或用 try-catch:
try {
// code
} catch (Exception $e) {
echo $e->getMessage();
}
如果你能告诉我:
我可以帮你更精准定位问题。