PHP 错误日志中的时区不正确

PHP 错误日志中的时区不正确

我的 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 函数,而那些错误的错误日志来自某个地方……

相关内容