【问题标题】:PHP gives date error for some (but not all) site visitorsPHP 为某些(但不是全部)网站访问者提供日期错误
【发布时间】:2011-11-22 23:05:39
【问题描述】:

我正在编写一个使用 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`

【问题讨论】:

  • 用户时区无关,php是服务器端,它显示你的服务器日期。
  • @Dagon 我知道它的目的是显示服务器的日期/时间。但是您如何解释调用 date() 函数会在一台机器上引发错误但在另一台机器上不会引发错误这一事实?
  • 您是否在代码中的任何位置使用ini_set('display_errors',VAL)?也许取决于用户代理?
  • 我的解释是你误解了这种情况,php是服务器端的,不知道浏览器是什么。

标签: php datetime date timezone


【解决方案1】:

感谢大家的反馈。

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      PHP 的错误/通知会在触发后立即回显(除非您使用的是输出缓冲),因此您的浏览器可能在外部发现错误/通知<html> 标签,所以丢弃了它,而你朋友的浏览器可能将它重新合并到 DOM 中~~

      【讨论】:

        猜你喜欢
        • 2017-05-15
        • 2016-04-22
        • 1970-01-01
        • 2020-07-20
        • 1970-01-01
        • 1970-01-01
        • 2010-09-27
        • 2014-06-25
        • 1970-01-01
        相关资源
        最近更新 更多