Ubuntu 上 PHP 日志“不写”是一个很常见的问题,通常不是 PHP 本身坏了,而是配置、权限或运行方式导致的。下面按最常见原因逐个排查。
PHP 常见日志有三类:
file_put_contents()、error_log())不同类型排查方式不同。
php --ini
查看:
log_errors = On
error_log = /var/log/php/php_errors.log
⚠️ 注意:
log_errors 必须是 Onerror_log 如果为空 → 日志会写到 Web 服务器日志php -i | grep error_log
或(FPM):
php-fpm -i | grep error_log
例如:
error_log = /var/log/php/php_errors.log
但:
ls -l /var/log/php/
如果目录不存在或 www-data 无写权限:
sudo mkdir -p /var/log/php
sudo chown www-data:www-data /var/log/php
sudo touch /var/log/php/php_errors.log
sudo chown www-data:www-data /var/log/php/php_errors.log
Ubuntu 下 PHP 通常以
www-data运行
sudo systemctl restart apache2
sudo systemctl restart php8.1-fpm
(版本号按实际)
如果没有设置 error_log,PHP 错误会写到:
/var/log/apache2/error.log/var/log/nginx/error.log检查:
tail -f /var/log/apache2/error.log
display_errors = On
log_errors = Off
→ 页面能看到错误,但日志不写
CLI 和 Web 是两套环境:
php -i | grep error_log
CLI 默认:
error_log =
→ 写到 stderr(终端)
file_put_contents('/var/www/app/log.txt', 'test');
如果:
→ 静默失败
file_put_contents('log.txt', 'x');
实际路径可能是:
/var/www/html/log.txt
# 1. 找 php.ini
php --ini
# 2. 看错误配置
grep -E "log_errors|error_log" /etc/php/*/fpm/php.ini
# 3. 测试写日志
php -r "error_log('test log');"
# 4. 看日志
tail -f /var/log/php/php_errors.log
你可以告诉我:
php -v)error_log 的值我可以直接帮你指出“哪一行配置错了”。