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

时间:2013-05-27 01:05:31

标签: php timezone

当我请求在服务器上将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>

25 个答案:

答案 0 :(得分:537)

您可能需要将时区放在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)。

这是list of supported timezones

答案 1 :(得分:192)

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

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

时区列表可在http://www.php.net/manual/en/timezones.php找到。

答案 2 :(得分:69)

index.php文件中添加以下内容。当我将应用程序从我的XAMPP服务器移动到Apache 2.2和PHP 5.4 ...

时,我第一次遇到这个问题

我建议您在index.php文件而不是php.ini文件中执行此操作。

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

答案 3 :(得分:16)

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

而不是

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

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

答案 4 :(得分:15)

如果这些不是您的选择

  • 修改php.ini
  • 添加date_default_timezone来电。

而不是date,您可以使用gmdate

当我需要一年的版权信息时,我使用了gmdate( "Y" )

答案 5 :(得分:14)

如果您正在使用CodeIgniter并且无法更改php.ini,我将以下内容添加到index.php的开头:

date_default_timezone_set('GMT');

答案 6 :(得分:13)

我始终将此行保留在codeigniter的根index.php内。这样我的代码可以在任何服务器上运行

date_default_timezone_set('Asia/Dhaka');

List of Supported Timezones here

答案 7 :(得分:10)

@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

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

答案 8 :(得分:4)

我不得不用双引号。

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

答案 9 :(得分:2)

除了设置date.timezone =如几个答案所述, 我在php.ini文件中发现了一个错误,导致它无法访问date.timezone。 我发现它的方式是从终端的命令行运行php。 这导致在第114行报告错误。在我的情况下,我已经取消注释了显示错误的设置,其中包含&#39; |&#39;两个值之间。它不喜欢它。 我删除了其中一个值和|那之后一切都很好

答案 10 :(得分:1)

两个时区的简单方法。

<?php 
$date = new DateTime("2012-07-05 16:43:21", new DateTimeZone('Europe/Paris')); 

date_default_timezone_set('America/New_York'); 

echo date("Y-m-d h:iA", $date->format('U')); 

// 2012-07-05 10:43AM 
?>

答案 11 :(得分:1)

<? date_default_timezone_set('Europe/Istanbul'); ?>

对于php(或您的位置)。

答案 12 :(得分:1)

您可以在.htaccess文件中设置时区

php_value date.timezone UTC

答案 13 :(得分:0)

我已经在 .htaccess 文件中完成或创建了这个:

php_value date.timezone Asia/Jakarta

但它不起作用。 然后我尝试将php版本从5升级到7,问题解决了。

答案 14 :(得分:0)

有两个解决方法

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

date.timezone = "America/New_York"

一旦您在 php.ini 重新启动服务器中设置了时区

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

date_default_timezone_set('America/New_York');

答案 15 :(得分: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>

答案 16 :(得分:0)

    date_default_timezone_set(date_default_timezone_get());

对于不知道时区的人来说,这是一个简单的解决方案。

答案 17 :(得分:0)

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

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

timezone.ini

    date.timezone=Australia/Sydney

答案 18 :(得分:0)

来自This answer

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文件所在的文件夹。

答案 19 :(得分:0)

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

service rh-php56-php-fpm restart

如果您修改了httpd

,则可能还需要重新启动php.ini服务
service httpd restart

答案 20 :(得分:0)

我在chroot jail中运行php-fpm时遇到此错误。我尝试在chroot目录中创建etc / php.ini和/ usr / share / zoneinfo,但它没有用。我甚至尝试过扫描php-fpm守护进程来查看他们丢失的文件 - 没有跳出来。

因此,如果Google将您带到这里,因为在使用为chroot配置的php-fpm时出现此错误,您可以通过在ENV部分中将此行添加到/etc/php-fpm.d/www.conf来修复它:

env[TZ] = America/New_York

通常需要php-fpm restart才能生效。希望这有助于那里的人。

答案 21 :(得分:0)

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

enter image description here

enter image description here

答案 22 :(得分: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 Configuring Network Time Protocol (NTP),我通过运行ntpstat命令确认ntpd服务状态正常。如果您收到错误,此链接可帮助您了解出现了什么问题。
  2. 打开/etc/php.ini文件(有些可能根据安装的php版本在不同的路径中),发现date.timezone未设置为任何值,默认情况下也进行了注释。我没有评论删除&#39 ;;&#39;在此行之前,将其值设置为"UTC"并保存文件。
  3. 使用sudo service httpd restartsudo service ntpd restart命令重新启动http和ntp守护程序。
  4. 在此之后,我能够成功列出存储桶,没有任何异常。希望这会有所帮助。

答案 23 :(得分:0)

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

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

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

答案 24 :(得分:-1)

在您的连接页面中,根据您当前的位置输入类似people.csv的代码。