必须手动开启 log_errors = on,否则 error_log 文件永远为空;需在 php.ini 中设 log_errors = on、用绝对路径配置 error_log、确保目录存在且有写权限、重启 apache 生效,且 web 与 cli 日志配置分离。

必须手动开启 log_errors = On,否则无论代码怎么错,error_log 文件永远为空。
为什么改了 php.ini 还没日志?
最常见原因是:只开了 display_errors = On(XAMPP 默认就开着),但漏掉关键一步——log_errors 仍为 Off。这个开关独立控制“是否写入文件”,和“是否显示在页面”完全无关。
检查方法:在 PHP 脚本里加一行:<?php var_dump(ini_get('log_errors')); ?>,输出 "0" 就确认被关着。
解决步骤:
- 打开
C:/xampp/php/php.ini(Windows)或/Applications/XAMPP/xamppfiles/etc/php.ini(macOS) - 搜索
log_errors,去掉行首分号,设为log_errors = On - 顺手确认
error_reporting没被设成0或过低值,推荐先用error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED
error_log 路径必须是绝对路径且目录存在
XAMPP 的 Apache 进程不认相对路径,./logs/php_error.log 或 ../logs/ 全部失效,会默默写到系统默认位置(比如 C:/Windows/System32/ 或 /var/log/),根本找不到。
正确做法:
- 在
php.ini中明确写死绝对路径,例如:error_log = "C:/xampp/php/logs/php_error.log"(Windows)或error_log = "/Applications/XAMPP/xamppfiles/logs/php_error.log"(macOS) - 手动创建对应目录:
C:/xampp/php/logs/或/Applications/XAMPP/xamppfiles/logs/,XAMPP 不会自动建这个文件夹 - Windows 下一般无权限问题;macOS/Linux 需确保该目录归属
daemon或_www用户,且有写权限(chmod 755不够,至少chmod 775)
重启 Apache 才生效,CLI 和 Web 日志是两套配置
改完 php.ini 后只刷新网页没用,必须彻底重启 Apache:
- 用 XAMPP Control Panel 点击
Stop再点StartApache - 或者命令行执行:
xampp restart apache
注意:error_log 设置只影响浏览器访问的 PHP 请求(即 Apache 处理的请求)。如果你用命令行跑 php test.php,它读的是 CLI 版的 php.ini(路径通常不同),日志也不会写进你刚配的那个文件。
验证是否成功:
- 写个测试脚本:
<?php trigger_error("test log write", E_USER_WARNING); ?> - 浏览器访问该脚本,然后立刻去你指定的
error_log路径下看文件是否新增内容
日志没生成?先排除路径和权限问题
如果确认 log_errors = On、路径绝对、目录存在、Apache 已重启,但日志还是空,优先怀疑权限或路径解析失败:
- 路径中含中文、空格、特殊符号(如
&、()会导致 Apache 忽略该配置,改用纯英文路径重试 - 临时把
error_log改成syslog(仅 macOS/Linux):error_log = syslog,然后查系统日志(console或journalctl -u apache2),能快速判断是“根本没触发记录”还是“写了但写不到文件” - Windows 下可尝试换路径,比如指向 Apache 自带日志目录:
error_log = "C:/xampp/apache/logs/php_error.log",那里权限通常没问题
真正容易被忽略的点:XAMPP 的 Apache 和 CLI PHP 使用不同的 php.ini,且错误日志路径不共享;同一个 error_log 配置项,在 CLI 下即使写对了路径,也只会作用于命令行执行的脚本,对 Web 请求无效。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











