在 Ubuntu 上定位 PHP 报错,通常可以从**错误日志、PHP 配置、运行方式(CLI / FPM / Apache)**几个层面入手。下面按实用顺序给你一套方法。
php --ini
常见配置文件:
/etc/php/8.1/cli/php.ini(命令行)/etc/php/8.1/fpm/php.ini(PHP-FPM)/etc/php/8.1/apache2/php.ini(Apache)display_errors = On ; 页面/终端显示错误(开发环境)
log_errors = On ; 记录错误日志
error_reporting = E_ALL
error_log = /var/log/php/php_errors.log
修改后重启服务:
sudo systemctl restart php8.1-fpm
# 或
sudo systemctl restart apache2
直接运行:
php script.php
错误会直接输出在终端。
查看 CLI 日志:
tail -f /var/log/php/php_errors.log
tail -f /var/log/nginx/error.log
tail -f /var/log/php8.1-fpm.log
如果在 php-fpm 池配置中指定了:
php_admin_value[error_log] = /var/log/php/myapp.log
就去看对应文件。
tail -f /var/log/apache2/error.log
在 PHP 文件最前面加:
ini_set('display_errors', 1);
error_reporting(E_ALL);
curl -I http://localhost/test.php
常见于:
upload_tmp_dir 不可写ls -ld /var/log/php
sudo apt install php-xdebug
zend_extension=xdebug.so
xdebug.mode=debug
xdebug.start_with_request=yes
配合 PHPStorm / VSCode 可逐行调试。
| 现象 | 可能原因 |
|---|---|
| 500 错误 | PHP 语法错误 / FPM 崩溃 |
| 白屏 | display_errors=Off |
| 权限报错 | www-data 无权限 |
| 内存耗尽 | memory_limit 太小 |
| 超时 | max_execution_time |
display_errors如果你愿意,可以告诉我:
我可以帮你精准定位到某一行问题。