xampp 默认不记录 php 错误日志,必须先将 php.ini 中 log_errors 设为 on,再指定绝对路径的 error_log,否则日志为空;还需确保目录存在、权限正确、apache 重启生效,并区分 web 与 cli 配置。

XAMPP 默认不记录 PHP 错误日志,log_errors 是关闭的,光改 error_log 路径没用,必须先开开关再指定路径,否则日志文件永远为空。
确认 log_errors 是否已启用
很多用户改了 error_log 却看不到错误写入,根本原因是 log_errors = Off 还在生效。PHP 只有在该配置为 On 时,才会把错误写进你指定的文件。
- 打开
C:/xampp/php/php.ini(Windows)或/Applications/XAMPP/xamppfiles/etc/php.ini(macOS) - 搜索
log_errors,确保它被设为On,不是Off或被注释掉 - 顺手检查
error_reporting值是否足够高,比如E_ALL & ~E_NOTICE & ~E_DEPRECATED,避免因级别过低漏记警告 -
display_errors = Off推荐同步设为Off,防止错误暴露在页面上(尤其上线后)
error_log 必须用绝对路径
error_log 不支持相对路径,./logs/php_error.log 或 logs/php_error.log 都会失效——Apache 进程运行时的工作目录不可控,很可能写到 C:/Windows/System32 或 /var/log 这类系统目录下,甚至静默丢弃。
- Windows 示例:
error_log = "C:/xampp/php/logs/php_error.log" - macOS 示例:
error_log = "/Applications/XAMPP/xamppfiles/logs/php_error.log" - 路径中避免中文、空格、特殊符号(如
&、(),否则 Apache 启动可能失败 - 目标目录(如
C:/xampp/php/logs/)必须存在,且 Apache 进程有写权限(Windows 一般默认满足;macOS/Linux 需确认所属用户是_www或daemon,并执行chmod 755)
区分 Web 请求与 CLI 的日志配置
你在浏览器访问 http://localhost/test.php 触发的错误,走的是 Apache 加载的 PHP 模块配置;而命令行执行 php test.php 用的是 CLI 版本的 php.ini,两套配置独立,error_log 路径可以完全不同。
- Web 请求日志由 Apache 的 PHP 模块控制,对应
C:/xampp/php/php.ini - CLI 日志默认可能写到系统临时目录,或完全不写,除非你单独配置 CLI 的
php.ini(通常在同目录下叫php-cli.ini或需手动指定) - 验证时务必用浏览器访问测试脚本,不要只跑
php -f,否则会误判配置失败
重启 Apache 后验证日志是否真实写入
改完 php.ini 不重启 Apache,配置等于没改。XAMPP Control Panel 上点「Start」不是热加载,是全新启动进程,旧配置仍驻留在内存里。
- 写一个测试脚本:
<?php trigger_error("test user warning", E_USER_WARNING); ?> - 保存为
test_error.php,放在htdocs下,用浏览器访问 - 立刻去你设置的
error_log路径查看文件末尾是否有新增行,注意文件编码(UTF-8 无 BOM)和换行符(Windows 用 CRLF,Linux/macOS 用 LF) - 如果仍为空,临时把
error_log = syslog(仅 macOS/Linux),然后查console.app或journalctl -u apache2,能快速判断是权限问题还是路径解析失败
最容易被忽略的是:XAMPP 中 PHP 错误日志和 Apache 自身的 error.log 是两回事。前者记录 parse error、undefined function 等 PHP 层级报错;后者只记模块加载失败、端口占用等服务器级问题。别翻错文件。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











