在 Ubuntu 上 PHP 日志“不生成”是很常见的问题,通常不是 PHP 本身坏掉了,而是配置、权限或运行方式导致的。下面按最常见原因逐步排查。
不同方式,日志位置完全不同:
php script.phpphp --ini
或(FPM):
php-fpm -i | grep php.ini
log_errors = On
error_log = /var/log/php/php_errors.log
⚠️ 注意:
error_log 为空 → 日志会写到 Web 服务器日志display_errors 只影响页面显示,不影响日志修改后重启:
sudo systemctl restart php-fpm
# 或
sudo systemctl restart apache2
error_log = /var/log/php/php_errors.log
但目录不存在:
ls -ld /var/log/php
sudo mkdir -p /var/log/php
sudo chown www-data:www-data /var/log/php
sudo chmod 755 /var/log/php
PHP 运行用户通常是:
www-data(Apache / Nginx + FPM)以下情况 不会写日志:
try/catch 捕获了异常error_reporting(0)@ 抑制错误测试代码:
<?php
error_reporting(E_ALL);
ini_set('display_errors', 0);
trigger_error("test php log", E_USER_WARNING);
Nginx 只记:
FastCGI sent in stderr
查看:
sudo tail -f /var/log/nginx/error.log
日志可能在:
/var/log/apache2/error.log
检查:
grep php /var/log/apache2/error.log
# 1. 当前 php.ini
php --ini
# 2. 日志配置
php -i | grep error_log
# 3. 日志文件权限
ls -l /var/log/php/
# 4. Web 服务日志
tail -f /var/log/nginx/error.log
tail -f /var/log/apache2/error.log
你可以直接贴出:
log_errors / error_log 的值我可以一步一步帮你定位到“为什么一个字都没写”。