当我在两台不同的服务器上使用 PHP 的date()
函数时,我得到了两个不同的结果,但两台服务器应该是相同的。
我检查了php.ini
服务器 #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 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
我确认两台服务器都使用php.ini
位于其中的服务器,/etc
并且我还在两个 Web 目录中搜索了时区可能被覆盖的任何地方:
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
值得注意的是,由于某种原因,“默认时区”在服务器#2 上与phpinfo()
通过网页查看时不匹配。
解决方案
问题出在 CMS 及其插件上。虽然服务器 #1 和 #2 具有相同的文件和所有内容,但似乎每个服务器上插件的加载顺序不同,这使得加载的最后一个插件可以确定我的脚本的时区。
原因php -i
和phpinfo
不同是因为你使用后date_default_timezone_set()
,它会影响phpinfo()
打印的内容。
修复是确保我在我需要通过的时区date_default_timezone_set()
。在我发布这个问题之前对我不起作用的原因是因为我在从 CMS 加载一些必需的文件之前声明了这一点,这可能会在那里再次设置时区。