我正在编写一个脚本,使用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~~