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

时间:2015-11-16 14:25:46

标签: php php-5.3 getdate

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

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

我希望与我的托管服务进行建设性的对话。首先,我自己做了一些挖掘工作。这是一个Apache服务器,我不确定它在哪个操作系统上。

我的phpinfo()说明了这一点:

=IF(SUM(IFERROR(SEARCH(
IF($C$7:$C$10<>G$6,CHAR(135),
INDEX($B$7:$B$10,N($C$7:$C$10=G$6))),$F7),0))=0,"",G$6)

这个,对于时区:

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

我期待主持人告诉我“对不起,设置正确 - 请更新您的申请以解决此错误”。

我是否让他们逃脱了这个答案,或者我是否应该强迫他们检查另一个以 /cli/php.ini 结尾的位置的设置?

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

任何帮助理解这一点将非常感激。我讨厌与我的东道主谈话,而不是对这个问题有透彻的了解,我自己。

2 个答案:

答案 0 :(得分:0)

您需要设置时区

date_default_timezone_set('Europe/London');

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

答案 1 :(得分:0)

发生这种情况的原因是因为在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,您将不再需要在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,所以你已经完成了艰苦的工作;提升一两个版本现在几乎不会有任何额外的工作,无论如何你都在做它。