【发布时间】:2012-10-13 13:26:24
【问题描述】:
当我在两台不同的服务器上使用 PHP 的 date() 函数时,我得到了两个不同的结果,但两台服务器应该是相同的。
我检查了服务器 #1 上的 php.ini 文件,其中时间是正确的,它看起来如下:
date/time support enabled
"Olson" Timezone Database Version 0.system
Timezone Database internal
Default timezone America/Chicago
Directive Local Value Master Value
---------------------------------------------------
date.timezone America/Chicago America/Chicago
我检查了服务器 #2,它看起来如下:
date/time support enabled
"Olson" Timezone Database Version 0.system
Timezone Database internal
Default timezone UTC
Directive Local Value Master Value
---------------------------------------------------
date.timezone America/Chicago America/Chicago
我看到的唯一区别是“默认时区”值。
两台服务器的日期/时间当前显示为:
Server #1: 10/23/2012 09:40:39
Server #2: 10/23/2012 14:40:39
我确认两台服务器都使用位于/etc 内的php.ini,并且我还在这两个网络目录中搜索了时区可能被覆盖的任何地方:
grep -r "date_default_timezone_set" *
但在这方面,它们都包含具有相同设置的相同文件。
“默认时区”是什么导致了 5 小时的差异?如果是这样,我该如何纠正?
更新
已加载配置文件。
服务器 #2 包含两个额外的 ini 文件:
/etc/php.d/snmp.ini
/etc/php.d/apc.ini
php -i 结果。
服务器 #1:
date/time support => enabled
"Olson" Timezone Database Version => 0.system
Timezone Database => internal
Default timezone => America/Chicago
Directive => Local Value => Master Value
date.timezone => America/Chicago => America/Chicago
服务器 #2:
date/time support => enabled
"Olson" Timezone Database Version => 0.system
Timezone Database => internal
Default timezone => America/Chicago
Directive => Local Value => Master Value
date.timezone => America/Chicago => America/Chicago
这里需要注意的是,由于某种原因,在通过php -i 与网页上的phpinfo() 查看时,服务器#2 上的“默认时区”不匹配。
解决方案
问题出在 CMS 及其插件上。虽然服务器 #1 和 #2 具有相同的文件和所有内容,但似乎每个服务器上插件的加载顺序不同,这使得加载的最后一个插件可以确定我的脚本的时区。
php -i 和 phpinfo 不同的原因是因为在您使用date_default_timezone_set() 之后,它会影响phpinfo() 将打印的内容。
解决方法是确保我处于我需要通过date_default_timezone_set() 进入的时区。在我发布这个问题之前对我不起作用的原因是因为我在从 CMS 加载一些必需的文件之前声明了这一点,这可能会在那里再次设置时区。
【问题讨论】:
-
两台服务器的系统时间一样吗?
-
将所有服务器配置为使用 UCT 作为其基准日期确实是个好主意。它让一切变得更加可预测。
-
@AlexLunix 是的,我刚刚检查过,它们都是一样的:
Tue Oct 23 10:03:57 CDT 2012 -
@SDC 是的,我同意。在这一点上,我只是想让它们保持相同。如果可以,我可以将它们设置为 UTC。
-
我也遇到了同样的问题,发现Laravel配置覆盖了php.ini默认时区