PHP为一些(但不是全部)站点访问者提供日期错误


PHP gives date error for some (but not all) site visitors

我正在编写一个脚本,使用date()函数进行日志记录。

在不同的地方我使用date('Y-m-d'), date('Y-m-d H-i-s')date(DATE_RFC822)

当我在Mac OS 10.6中使用Safari, Firefox和Chrome从我的计算机访问该页面时,页面按预期加载并且没有导致错误。

当一个同事(和我在相同的地理区域和时区)从她的计算机上访问页面,使用与我相同的操作系统和浏览器时,她在所有浏览器中收到以下错误:

date() [function.date]: It is not safe to rely on the system's timezone settings. Please use the date.timezone setting, the TZ environment variable or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'America/New_York' for 'EST/-5.0/no DST' instead

我假设date()函数与客户端的时区无关,但这似乎表明情况并非如此。

我通过date_default_timezone_set("America/New_York"); 指定时区解决了这个问题,但是我想理解为什么客户端应该对服务器的时区有任何影响。

客户端的时区如何以及为什么影响PHP对时区的处理,特别是关于date()函数?

PHP版本:5.2.5

查看phpinfo():

date/time support   enabled
"Olson" Timezone Database Version   2007.9
Timezone Database   internal
Default timezone    US/Eastern`

感谢大家的反馈。

我确定这实际上是由于web服务器分布在两个服务器节点上。一个节点运行PHP 5.2.5,另一个节点运行PHP 5.1.6。每次访问页面时,我都由PHP 5.2.5节点提供服务,而另一个人则由使用旧版本PHP的节点提供服务。因此,即使我们访问的是完全相同的URL,我们实际上是由不同的web服务器提供服务的。非常糟糕的情况。

解决方案当然是使节点彼此相同。正如大家所说,客户端不可能影响date()函数。

不可能。您的代码可能在某些依赖于用户代理的区域中出现错误,但是用户的浏览器、操作系统或计算机不会影响代码。

PHP的错误/通知一旦被触发(除非您正在使用outputbuffering),那么可能您的浏览器在<html>标记之外发现了错误/通知,因此丢弃了它,而您的朋友的浏览器可能会将其重新合并回DOM~~