Symfony2和date_default_timezone_get()-依靠系统的时区设置并不安全


77

我有一个Symfony2项目。我今天将php更新到5.5.7,从那时起,我开始

Warning: date_default_timezone_get(): 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 the timezone 'UTC' for now, but please set date.timezone to select your timezone. in...

我在php.ini中设置了默认时区

[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = "Europe/Paris";

为了确保这是很好的php.ini,我正在与

phpinfo();

我要到达的路径就是我正在修改的路径:

 /usr/local/php5.5.7/lib 

但是在那里,我看到了

Default timezone    UTC 

真奇怪

任何的想法?谢谢。


2
您能确认一下您已更改的php.ini的完整路径吗
sas 2013年

2
如果您在symfony控制台中收到此警告,则还需要在cli / php.ini中进行更改
2013年

Answers:


148

也许您正在尝试在Apache的中进行设置php.ini,但是您的CLI(命令行界面)php.ini不好。

php.ini使用以下命令查找文件:

php -i | grep php.ini

然后搜索date.timezone并将其设置为"Europe/Amsterdam"。所有有效的时区都可以在这里找到http://php.net/manual/en/timezones.php

另一种方法(如果其他方法不起作用),搜索文件AppKernel.php,该文件应在Symfony项目目录的文件夹app下。覆盖该类中的以下函数:__constructAppKernel

<?php     

class AppKernel extends Kernel
{
    // Other methods and variables


    // Append this init function below

    public function __construct($environment, $debug)
    {
        date_default_timezone_set( 'Europe/Paris' );
        parent::__construct($environment, $debug);
    }

}

谢谢你,但已经检查:加载的配置文件=> /usr/local/php5.5.7/lib/php.ini
米洛什

cli应该有其他配置,您也检查过吗?
sas 2013年

嗯,如何找到第二个呢?
米洛什

1
重新启动您的apache2也将假设也重新启动php
sas 2013年

1
我遇到了同样的问题,您的另一种解决方案与我一起工作
ahmed hamdy 2014年

66

找到了解决此问题的类似方法(至少对我有用)。

  1. 首先检查的CLI php.ini位置:

    php -i | grep "php.ini"

  2. 在我的情况下,我最终得到:配置文件(php.ini)路径=> / etc

  3. 然后cd ..一直cd到进入/etcls在我的情况下php.ini并未显示,只有php.ini.default

  4. 现在,复制名为php.ini的php.ini.default文件:

    sudo cp php.ini.default php.ini

  5. 为了编辑,更改文件的权限:

    sudo chmod ug+w php.ini

    sudo chgrp staff php.ini

  6. 打开目录并编辑php.ini文件:

    open .

    提示:如果由于某些权限问题而无法编辑php.ini,请复制'php.ini.default'并将其粘贴到桌面上,并将其重命名为'php.ini',然后打开并按照以下步骤进行编辑7.然后将其移动(复制+粘贴)到/ etc文件夹中。问题将得到解决。

  7. 搜索[日期],并确保以下行的格式正确:

    date.timezone = "Europe/Amsterdam"

我希望这可以帮助您。


1
你刚刚救了我一个严重的头痛。谢谢你,朋友!
Stephen Tetreault

从技术上讲,这应该是正确的答案,因为它可以长期解决问题。

25

Symfony 2.3中不赞成使用当前接受的破解答案,而3.0版将删除该答案。应该将其移到构造函数中:

public function __construct($environment, $debug) {
    date_default_timezone_set('Europe/Warsaw');
    parent::__construct($environment, $debug);
}

感谢您的回答。它解决了我在版本3中的问题
dericcain

2

从PHP 5.5开始,CLI界面有一个单独的php.ini文件。如果您从命令行使用symfony控制台,则使用此特定的php.ini。

在Ubuntu 13.10中检查文件:

/etc/php5/cli/php.ini


1

当我们在Redhat或Cent OS上使用PHP 5.1时,会出现问题

RHEL / CentOS上的PHP 5.1不支持时区功能


1

在跟进SAS的回答,PHP 5.4,Symfony的2.8,我不得不使用

ini_set('date.timezone','<whatever timezone string>');

代替date_default_timezone_set。我还向ini_set自定义顶部添加了一个调用,web/config.php以使该检查成功。


-1

将此代码添加到您的AppKernel类中:

public function init()
{
    date_default_timezone_set('Asia/Tehran');
    parent::init();
}

init从2.3版开始不推荐使用,在3.0版中将其删除。在构造函数中移动您的逻辑,而不是像@Krzysztof Bociurko或更新的接受答案。
user276648 '16
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.