PHP日志需通过php.ini配置log_errors=On、error_log指定路径、display_errors=Off(生产环境)、error_reporting=E_ALL & ~E_DEPRECATED & ~E_STRICT;运行时可用ini_set()动态设置;还需协同Nginx/Apache/PHP-FPM日志,并验证路径权限与服务重启。

PHP日志参数主要通过 php.ini 文件配置,核心是控制错误是否记录、记录到哪里、记录哪些级别、是否在页面显示。配错会导致日志不生成、敏感信息泄露或调试困难。
关键参数设置(php.ini)
打开当前生效的 php.ini(可通过 phpinfo() 查看路径),重点修改以下几项:
- log_errors = On:必须开启,否则所有错误都不会写入日志文件
-
error_log = /var/log/php_error.log:指定日志绝对路径,Linux 常用
/var/log/,Windows 可用C:\php\logs\php_error.log;确保该目录存在且 Web 进程用户(如www-data或nginx)有写权限 -
display_errors = Off:生产环境务必关闭,防止错误堆栈暴露数据库密码、路径等敏感信息;开发阶段可临时设为
On辅助调试 -
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT:推荐值,记录所有运行时错误、警告、通知,但过滤掉已弃用和严格标准提示;若需更精简,可用
E_ALL & ~E_NOTICE
运行时动态配置(脚本内)
当无法修改 php.ini(如共享主机、容器临时调试),可在 PHP 脚本开头用 ini_set() 覆盖:
ini_set('log_errors', '1');ini_set('error_log', '/var/www/logs/runtime_error.log');ini_set('display_errors', '0');error_reporting(E_ALL);
注意:该方式仅对当前脚本生效,且不能捕获解析错误(如语法错误、缺少括号)。
立即学习“PHP免费学习笔记(深入)”;
Web服务器层协同配置
PHP 错误日志只记录 PHP 层错误,完整排查还需 Web 服务器日志:
-
Nginx:在
server或location块中添加access_log /var/log/nginx/myapp_access.log;error_log /var/log/nginx/myapp_error.log warn; -
Apache:在虚拟主机配置中添加
CustomLog "/var/log/apache2/myapp_access.log" combinedErrorLog "/var/log/apache2/myapp_error.log" - PHP-FPM 场景下,建议在 pool 配置(如
www.conf)中启用:catch_workers_output = yes,可捕获echo/var_dump等未捕获输出
验证与排错要点
配置后必须验证是否真正生效:
- 重启对应服务:
sudo systemctl restart php-fpm nginx(Nginx+PHP-FPM)或apache2 - 创建测试脚本:
<?php trigger_error('Test warning', E_USER_WARNING); ?>,访问后检查日志文件是否有新增行 - 常见失败原因:
error_log路径目录不存在、权限不足(可用ls -l /var/log/检查属主)、SELinux/AppArmor 限制、磁盘满、日志路径为相对路径(PHP 中相对路径以 Web 根目录为基准,易出错)



















