当我在两个不同的服务器上使用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
我确认两台服务器都使用位于php.ini
内的/etc
,并且我还搜索了两个网络目录,以查找时区可能被覆盖的任何地方:
grep -r "date_default_timezone_set" *
但在这方面,它们都包含具有相同设置的相同文件。
“默认时区”是什么造成了5h的差异?如果是这样,我该如何纠正?
更新
已加载的配置文件。
服务器#2包含两个额外的ini文件:
/etc/php.d/snmp.ini
/etc/php.d/apc.ini
php -i results。
服务器#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加载一些必需文件之前声明了这一点,这可能会在那里再次设置时区。
答案 0 :(得分:11)
date()
依赖于date.timezone INI设置。由于一个是芝加哥(CT),另一个是UTC,这是你的5小时差异。
我相信从PHP开始> 5.2你应该收到:
PHP警告:未知:依赖系统的时区是不安全的 设置。您必需使用date.timezone设置或 date_default_timezone_set()函数。
我建议您查看新的DateTime对象,或按照 SDC 的建议使用UTC。
答案 1 :(得分:5)
要检查的一些事项:
答案 2 :(得分:2)
以下是代码:
[Date]
date.timezone = ('America/New_York')
date.default_latitude = 31.7667
date.default_longitude = 35.2333
date.sunrise_zenith = 90.583333
date.sunset_zenith = 90.583333
只需将date.timezone = ('America/New_York')
更改为您想要的时区。
答案 3 :(得分:1)
http://us.php.net/manual/en/function.date-default-timezone-get.php
TZ环境优先于php.ini默认值;也许这就是原因。您可以通过显式调用date_default_timezone_set来解决此问题。
答案 4 :(得分:1)
使用Ubuntu 14.0 LTS 我的案例中的默认时区设置为:
/etc/php5/cli/php.ini
然后我可以通过以下方式验证:php -i | grep“timezone”
答案 5 :(得分:1)
如果在php.ini中设置date.timezone值但它不起作用(即本地值和主值不同),那么您可能需要在apache配置文件中更新这样的内容:
<IfModule mod_php5.c>
php_value date.timezone "Europe/Paris"
</IfModule>
对于之前删除上述答案的mod:我已经搜索了几个小时来找到这个解决方案。不要因为您认为答案是重复而删除答案。