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



我遇到了这里描述的相同问题,时区错误:

PHP配置:依赖系统是不安全的';s时区设置

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

我的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

我期待着我的主机告诉我"对不起,设置是正确的-请更新您的应用程序以解决此错误"。

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

我想我不明白这个文件在我的情况下会在哪里,或者如果phpinfo()说唯一加载的ini文件在/usr/local/php53/lib/php.ini ,为什么它会被引用

如果您能理解这一点,我们将不胜感激。我讨厌在没有彻底了解这个问题的情况下与我的主人交谈。

之所以会出现这种情况,是因为在5.3版本中,PHP开发人员决定要求在PHP.ini文件中显式设置时区(或在.htaccess中,或使用date_default_timezone_set())。之所以这样做,是因为早期的PHP版本存在一个明显的问题,即时区没有设置,人们依赖的默认值通常并不正确(例如,因为他们在不同的时区使用托管服务器)。由此引发了大量严重问题,要求明确设置是为了解决这些问题。

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

您的主机显然没有在PHP.ini中设置时区。考虑到服务器刚刚从PHP5.2升级,这并不奇怪;5.2不需要设置它(它是从系统时区默认的),所以在升级中很容易错过它。

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

php_value date.timezone "America/Chicago"

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

有趣的是,设置时区警告的决定实际上正在被推翻:随着即将发布的PHP7.0,您将不再需要在PHP.ini中显式指定时区。您可以在此处阅读有关此更改的更多信息: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,所以你已经完成了艰苦的工作;现在,当你无论如何都在做的时候,再升级一两个版本几乎不是什么额外的工作。

您需要设置时区

date_default_timezone_set('Europe/London');

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

最新更新