php.ini 的 error_log 配置决定 error_log() 函数默认输出位置:设为文件路径则写入该文件(需权限),设为 syslog 则发往系统日志,为空或未设置时 CLI 输出到 stderr、Web 环境通常回退至 Web 服务器日志。

php.ini 里的 error_log 配置决定默认输出位置
PHP 的 error_log() 函数在没指定目标时,完全依赖 php.ini 中的 error_log 指令。这个值不写,或写成空字符串、syslog、stderr,行为完全不同:
-
error_log = /var/log/php_errors.log→ 写入该文件(需 PHP 进程有写权限) -
error_log = syslog→ 发送到系统日志(journalctl -u php-fpm或tail /var/log/messages查) -
error_log =(空)或未设置 → CLI 下走stderr(终端红色输出),Web 环境下通常 fallback 到 Web 服务器日志(如 Apache 的error_log)
查当前生效的 php.ini 路径:运行 php --ini;再用 grep error_log $(php --ini | grep "Loaded Configuration File" | cut -d' ' -f4) 看实际值。
Web 服务器日志里常藏着没配 error_log 的 PHP 错误
很多环境没单独配 error_log,PHP 致命错误、警告就直接混进 Web 服务器日志里。别只盯着“PHP 日志”这个词:
- Apache:看
/var/log/httpd/error_log(CentOS/RHEL)或/var/log/apache2/error.log(Debian/Ubuntu) - Nginx + PHP-FPM:PHP 错误一般不出现在
/var/log/nginx/error.log,而是在 PHP-FPM 自己的日志里(见下一条) - 注意:
display_errors = Off时浏览器看不到错,但这些日志里仍有记录
PHP-FPM 的 www-error.log 是最常被忽略的 PHP 错误源
用 PHP-FPM(绝大多数生产 Nginx 环境都用它)时,error_log() 默认不走 php.ini,而是由 FPM pool 配置控制。关键配置在 /etc/php-fpm.d/www.conf(路径可能因版本/发行版不同):
立即学习“PHP免费学习笔记(深入)”;
- 找
catch_workers_output = yes(必须开,否则 worker 输出被丢弃) - 找
php_admin_value[error_log] = /var/log/php-fpm/www-error.log(这才是你该盯的日志) - 对应日志文件通常为
/var/log/php-fpm/www-error.log或/var/log/php-fpm/error.log - 改完记得
sudo systemctl reload php-fpm
error_log() 写文件时权限和路径容易出错
手动调用 error_log('msg', 3, '/path/to/log') 写文件,失败往往不是代码问题,而是环境卡点:
- 路径必须是绝对路径;相对路径行为不可靠
- PHP 进程用户(如
www-data、apache、nginx)必须对目录有w权限,对文件有w权限 - 目录不存在时不会自动创建,
error_log()直接静默失败(无报错) - 避免写到 Web 可访问目录(如
/var/www/html/),防止被直接下载
最稳妥做法:用 touch /var/log/myapp/debug.log && chown www-data:www-data /var/log/myapp/debug.log 预置好文件再写。



















