我的 PHP 错误日志中的时间戳以 UTC 显示。我希望它们以我的本地时区显示。
- 我的 php.ini 文件中的属性
date.timezone
设置为正确的时区。 - 输出
phpinfo()
显示正确的时区。 - 输出
phpinfo()
表明已加载正确的 php.ini 文件。 - 服务器的时钟已设置为正确的时区。
我用谷歌找到的所有网站都只建议检查这三件事。
我正在使用 Windows Server 2019 和 IIS。
以下是日志文件中某一行当前的样子的示例:
[28-Dec-2018 14:22:39 UTC] PHP Warning: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in C:\path\media.php on line 694
更新:如果我从命令行运行 PHP 脚本,并且该脚本生成错误,则日志条目确实具有我本地时区的时间戳。
答案1
根据我的评论,听起来您的网络服务器正在使用默认日志文件格式(W3C Extended),默认情况下使用 GMT。MS 支持页面我链接了两个针对此问题的解决方案。
临时解决方案是在日志文件上运行以下命令:
c:\windows\system32\convlog -ie LogFileName -t ncsa:+/-GMTOffset
其中 LogFileName 是要转换的文件的名称,GMTOffset 是要更正的小时数。(例如,EST 为 -0500)。注意:此解决方案实际上不会更改日志条目的时间戳。它将 GMT 偏移量输入到每个条目中,以便任何阅读日志的人都可以看到时间戳不是本地时间。
以下是该实用程序生成的日志条目的示例:
192.168.1.1 - - [30/Jun/2000:20:16:40 -0500] "GET /default.asp HTTP/1.0" 200
看来,最好的解决方案是将日志文件格式更改为 IIS 日志文件格式。我找到了以下指南,其中第 4 步告诉您如何执行此操作:
https://docs.microsoft.com/en-us/iis/manage/provisioning-and-managing-iis/configure-logging-in-iis
这适用于 Windows Server 2012 和 Windows 8,但可能与您的版本类似。请注意,更改可以应用于不同的级别:站点、每个站点(服务器)、每个服务器(服务器)。
答案2
问题可能与以下名称的通用 WordPress 文件有关:
wp-includes/PHPMailer/PHPMailer.php
该文件使用了一个糟糕的 PHP 函数,名称为:gmdate()
该功能使用 UTC…
我已将其替换为 echo date('Ymd H:i:s'); 函数(大约第 928 行),并且还在文件的开头放置了指令:date_default_timezone_set('Myontinenet/MyCountry');。
这似乎解决了 PHP 错误日志的问题,不是记录当前时间,而是记录 UTC 时间。
我在所有域文件上搜索 stringerror_log ( 的用法时发现了问题。这是因为这是记录错误日志的 PHP 函数,而那些错误的错误日志来自某个地方……