“ date():依靠系统的时区设置是不安全的……”


359

当我请求将服务器上的PHP版本从5.2.17 更新到PHP 5.3.21 时出现此错误。

<div style="border:1px solid #990000;padding-left:20px;margin:0 0 10px 0;">

<h4>A PHP Error was encountered</h4>

<p>Severity: Warning</p>
<p>Message:  date(): 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/New_York' for 'EDT/-4.0/DST' instead</p>
<p>Filename: libraries/Log.php</p>
<p>Line Number: 86</p>

</div>
Warning: date(): 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/New_York' for 'EDT/-4.0/DST' instead in /filelocation right here/system/libraries/Log.php on line 86

Warning: date(): 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/New_York' for 'EDT/-4.0/DST' instead in /filelocation right here/system/libraries/Log.php on line 99
<div style="border:1px solid #990000;padding-left:20px;margin:0 0 10px 0;">

<h4>A PHP Error was encountered</h4>

<p>Severity: Warning</p>
<p>Message:  date(): 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/New_York' for 'EDT/-4.0/DST' instead</p>
<p>Filename: libraries/Log.php</p>
<p>Line Number: 99</p>

</div>

Answers:


556

您可能需要将时区放在php.ini文件的配置行中。您应该在php.ini文件中有一个这样的块:

[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = America/New_York

如果没有,请添加它(用您的时区代替)。配置后,请确保重新启动httpd(service httpd restart)。

这是受支持的时区列表


12
要明确的是,进行此更改后,请确保sudo service apache2 restart
Ryan

2
这在其他解决方案无法解决的情况下为我解决了。当我在与Amazon SES集成的同一页面上使用日期函数时,才收到此错误。也许那会帮助别人。
master_gracey 2013年

9
如果在客户端中使用PHP CLI(php -r或php -a),则需要编辑CLI php.ini文件,而不是apache2。YourC CLI php.ini文件通常可以在/etc/php5/cli/php.ini中找到
justinpage 2014年

2
像关于Apache的第一条评论一样,您还必须重新启动IIS,这样才能在Windows / IIS上生效。
jross 2014年

2
这解决了我的问题!只是针对像我这样的非专家的信息,为了找到php.iniapache使用的信息,只需执行以下命令php -i | grep php.ini
乔尔Salamin

198

如果您无法修改php.ini配置,则还可以在代码开头使用以下代码段:

date_default_timezone_set('Africa/Lagos');//or change to whatever timezone you want

时区列表可以在以下位置找到 http://www.php.net/manual/en/timezones.php中


7
由于某些原因,在使用swiftmailer运行脚本时,在我的php.ini中设置date.timezone = America / New_York并重新启动apache不会停止此错误消息。我最后还不得不添加date_default_timezone_set('America / New_York'); 根据建议在脚本顶部。谢谢!
凯尔

我尝试了您的解决方案。现在,错误是500内部服务器错误。我正在使用apache 2.x和codeigniter。
哈菲兹·谢赫巴兹·阿里2015年

@ShehbazAli您一定做错了。您在哪个脚本中添加了代码段?
Babatunde Adeyemi

相同的代码正在生产中。没有错误。我已经在窗口10上手动安装了Apache,PHP和MySQL。PHP,MySQL和Apache可以工作。但是,这个项目出错了。
哈菲兹·谢巴兹·阿里2015年

72

index.php文件中添加以下内容。当我从我的应用程序中移出我的应用程序时,我首先遇到了这个问题 XAMPP中服务器移到Apache 2.2和PHP 5.4。

我建议你在 index.php文件而不是php.ini文件中进行操作。

if( ! ini_get('date.timezone') )
{
    date_default_timezone_set('GMT');
}

3
当您不一定具有完整的系统访问权限时,这是一个出色的解决方案,您可以猜想这是针对访问受限或需要更强大解决方案的用户的解决方案,如果可以的话,请与编辑php.ini结合使用
2014年

18
<? print(gmdate("Y")); ?> 

代替

<? print(date("Y")); ?>

为我工作(显示当前年份,并且不再显示错误消息)。(感谢上面的克里斯)


15

如果这些不是您的选择

  • 修改中php.ini
  • 正在添加date_default_timezone通话。

相反,date您可以使用gmdate

gmdate( "Y" )需要一年的版权摘要时就用过。




11

@Justis为我指出了正确的方向,但是他的代码对我不起作用。这样做:

// set the default timezone if not set at php.ini
if (!date_default_timezone_get('date.timezone')) {
    // insert here the default timezone
    date_default_timezone_set('America/New_York');
}

文档:http : //www.php.net/manual/en/function.date-default-timezone-get.php

该解决方案不仅适用于没有完全系统访问权限的用户。将脚本提供给除您以外的任何人时,这对于任何脚本都是必需的。当您将脚本分发给其他人时,您永远都不知道脚本将在什么服务器上运行。


5

这个问题一直困扰着我一段时间,因为我试图将“ createbucket.php”脚本注入作曲家,而且我一直被告知时区不正确。

最后,解决该问题的唯一方法是: $ sudo nano /etc/php.ini

搜索时区

[Date]
; Defines the default timezone used by the date functions
; http://www.php.net/manual/en/datetime.configuration.php#ini.date.timezone
date.timezone = UTC

确保删除 ;

然后最后

$ sudo service httpd restart

而且你会很好:)


5

我不得不用双引号引起来。

date_default_timezone_set("America/Los_Angeles"); // default time zone

仍然没有工作(在Mac OSX中),所以我最终崩溃了并添加了/etc/php.ini: date.timezone = America/Los_Angeles
MarkHu '16


2

除了如几个答案中提到的那样设置date.timezone =之外,我在php.ini文件中发现了一个错误,该错误阻止了它到达date.timezone。我发现它的方法是在终端中从命令行运行php。这导致在第114行报告错误。在我的情况下,我没有注释显示具有'|'的错误的设置。在2个值之间。它不喜欢它。我删除了其中一个值和| 之后一切都很好




0

在纠正不兼容性的同时,一种快速的解决方案是禁用index.php文件中的错误报告:

将以下行插入下面的index.phpdefine( ‘_JEXEC’, 1 );

error_reporting( E_ERROR | E_PARSE | E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR |
E_COMPILE_WARNING );

0

我在us-west-2(俄勒冈)地区托管EC2和S3存储桶。当我打电话$s3client->listBuckets()列出我的PHP中现有的存储桶时,我遇到了异常- "Uncaught exception 'Exception' with message 'DateTime::__construct(): It is not safe to rely on the system's timezone settings...". 我进行了以下更改以使其工作。如果有人遇到类似问题并且上述任何答案都无济于事,请共享这些详细信息。

  1. 根据文档@ AWS 配置网络时间协议(NTP),我通过运行ntpstat命令确认ntpd服务状态良好。如果遇到错误,此链接可帮助您了解问题所在。
  2. 打开/etc/php.ini文件(根据安装的php版本,某些文件可能位于不同的路径中),发现该文件date.timezone未设置为任何值,并且默认情况下已对其进行注释。我取消删除';'的评论 在此行之前,并将其值设置为"UTC"并保存文件。
  3. 使用sudo service httpd restartsudo service ntpd restart命令重新启动http和ntp守护程序。

之后,我可以毫无例外地成功列出存储桶。希望这可以帮助。


0

如果您使用的是Plesk,请尝试,首先,在页面底部,打开PHP设置,将date.timezone从DEFAULT更改为UTC。

在此处输入图片说明

在此处输入图片说明


0

我在chroot监狱中运行php-fpm时遇到此错误。我尝试在chroot目录中创建etc / php.ini和/ usr / share / zoneinfo,但是它没有用。我什至尝试过跟踪php-fpm守护程序,以查看它们丢失了什么文件-没有任何内容跳出来。

因此,如果Google将您带到这里是因为在使用为chroot配置的php-fpm时收到此错误,则可以通过/etc/php-fpm.d/www.conf在ENV部分中添加以下行来解决此问题:

env[TZ] = America/New_York

通常需要重新启动php-fpm才能使其生效。希望这对有人有所帮助。


0

在我的特殊情况下,我将PHP配置为使用PHP-FPM(FastCGI流程管理器)。phpinfo()从CLI 执行时,我看到了在php.ini中设置的正确时区,但是在浏览器中它仍然不正确,并导致我的代码失败。我只需要重新启动php-fpm服务器上的服务即可。

service rh-php56-php-fpm restart

httpd如果您编辑了以下内容,则可能还需要重新启动服务php.ini

service httpd restart

0

这个答案以上从CTRLX是正确的答案,但它可能不会完全正常工作。我将此行添加到我的php.ini文件中:

date.timezone = "America/Los_Angeles"

但它并没有消除我所有文件的PHP错误,因为我的某些PHP脚本位于子文件夹中。因此,我必须编辑.htaccess文件以设置php.ini以递归使用(在子文件夹中):

suphp_configpath /home/account_name/public_html

其中account_name是您的cpanel帐户名,而public_html是您的php.ini文件所在的文件夹。


0

对于docker用户:在您的项目中创建一个本地timezone.ini文件,在docker-compose.yml中设置配置,

    volumes:
        - "./docker/config/timezone.ini:/usr/local/etc/php/conf.d/timezone.ini"

时区

    date.timezone=Australia/Sydney

0

如果您无权访问该文件php.ini,请.htaccess在您的域或子目录的根目录中创建或编辑文件,然后添加此文件(由cpanel生成):

<IfModule mime_module>
AddType application/x-httpd-ea-php56 .php .php5 .phtml
</IfModule>

<IfModule php5_module>
php_value date.timezone "America/New_York"
</IfModule>

<IfModule lsapi_module>
php_value date.timezone "America/New_York"
</IfModule>

如果普通的大写字母约定可以表达您想要说的内容,请不要使用大写字母。
shizhen

0

有两种解决方法

首先,更改为php.ini文件并放入默认时区

date.timezone = "America/New_York"

一次,您已在php.ini中设置了时区,然后重新启动服务器

其次,根据需要更改运行时间分配时区

date_default_timezone_set('America/New_York');

-1

在您的连接页面中,date_default_timezone_set("Africa/Johannesburg");根据您当前的位置输入这样的代码。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.