PHP getdate() 错误从 PHP 5.2 移动到 5.3

PHP getdate() error moving from PHP 5.2 to 5.3

我 运行 遇到了此处描述的相同问题,时区错误:

PHP Configuration: It is not safe to rely on the system's timezone settings

我想与我的托管服务进行建设性对话。所以我先自己做了一些挖掘。这是一个 Apache 服务器,我不确定它在哪个 OS 上。

我的 phpinfo() 声明如下:

Loaded Configuration File   /usr/local/php53/lib/php.ini

还有这个,对于时区:

date/time support   enabled
"Olson" Timezone Database Version   2013.3
Timezone Database   internal
Default timezone    America/Chicago

因此,乍一看似乎时区设置正确。但我仍然收到错误:

getdate() [function.getdate]: It is not safe to rely on the system's
timezone settings. You are *required* to use the date.timezone setting
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/Chicago' for
'CST/-6.0/no DST' instead

我期待我的主人告诉我 "sorry, the setting is correct - please update your application to solve this error"。

我是让他们逃避那个答案,还是应该强迫他们去检查另一个以 /cli/php.ini 结尾的位置的设置?

我想我不明白在我的情况下该文件在哪里,或者如果 phpinfo() 说正在加载的唯一 ini 文件位于 /usr/local/php53/lib/php.ini[,为什么甚至会引用它=16=]

如果能帮助理解这一点,我们将不胜感激。我讨厌在没有彻底了解问题的情况下与我的东道主交谈,我自己。

您需要设置时区

date_default_timezone_set('Europe/London');

http://php.net/manual/en/function.date-default-timezone-set.php

发生这种情况的原因是因为在 5.3 版本中,PHP 开发人员决定要求在 PHP.ini 文件(或 .htaccess,或使用date_default_timezone_set())。这样做的原因是早期的 PHP 版本没有设置时区,人们依赖默认值,而默认值通常实际上是不正确的(例如,因为他们在不同的时区使用托管服务器) .由此引发了大量严重问题,要求明确设置是解决这些问题的尝试。

解决方案是确保您的 PHP.ini 文件包含时区设置。如果您在共享主机上并且无法更新 PHP.ini,那么您可以在本地 .htaccess 文件中设置它(假设您在 Apache 服务器上;其他服务器软件可能不同)。如果你不能在那里设置它,那么你必须在代码中设置它。

您的主机显然没有在 PHP.ini 中设置时区。鉴于服务器刚刚从 PHP 5.2 升级,这并不奇怪; 5.2不需要设置(默认是系统时区),所以在升级的时候很容易漏掉。

从您的角度来看,您可以通过在 .htaccess 中设置时区来完全避免与您的主机进行对话。只需使用以下行创建一个 .htaccess 文件(或编辑您现有的文件):

php_value date.timezone "America/Chicago"

然而,理想情况下,它真的 应该 在 PHP.ini 文件中设置,如果它在你的主机控制之下,那么你最好用他们 -- 不设置它是一个非常明显的迹象,表明他们对 PHP 一无所知,而且升级后他们当然没有实际测试他们的配置。这应该让你担心,因为可能还有其他问题等着你; PHP 在 5.2 和 5.3 之间有一些重大变化,许多功能已弃用,默认配置值已更改,您和您的主机在进行此升级时确实需要注意这些。

有趣的是,这个时区警告的决定实际上正在被推翻:随着即将发布的 PHP 7.0,您将不再需要在 [=33] 中明确指定时区=].您可以在此处阅读有关此更改的更多信息:https://wiki.php.net/rfc/date.timezone_warning_removal。这显然暂时不会影响你,但它仍然很有趣。

在我回答的同时,我想重申上面的段落——即下个月发布 PHP7——并指出你正在升级到 PHP 已经过时很久的版本。

PHP 5.3 于一年多前(2014 年 8 月)宣布生命周期结束,此后没有任何更新。甚至 PHP 5.4 现在也已结束(尽管这才刚刚发生)。我真的很高兴听到你要离开 5.2,但你不应该满足于 5.3:我强烈建议你现在进一步升级,无论如何你都在做升级工作,否则以后会浪费你更多的时间。

我并不是建议一直升级到 PHP7,但您应该将 5.4 视为绝对最低版本,而将 5.5 或 5.6 作为当今的首选版本。到目前为止,升级的最大痛苦是从 5.2 升级到 5.3,所以您已经完成了艰苦的工作;升级一个或两个以上的版本现在几乎不需要任何额外的工作,无论如何你都在这样做。