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

我有一个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(); 

我到达那里的path是我正在修改的path:

  /usr/local/php5.5.7/lib 

但在那里,我看到了

 Default timezone UTC 

这很奇怪

任何想法? 谢谢。

也许你正试图在Apache的php.ini设置它,但是你的CLI(命令行界面) php.ini并不好。

使用以下命令find您的php.ini文件:

 php -i | grep php.ini 

然后searchdate.timezone并将其设置为"Europe/Amsterdam" 。 所有有效的时区将在这里findhttp://php.net/manual/en/timezones.php

另一种方法(如果其他方法不起作用),search文件AppKernel.php ,该文件应位于Symfony项目目录的文件夹app下。 覆盖类AppKernel__construct函数:

 <?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); } } 

find了类似的方法来解决这个问题(至less它为我做了)。

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

    php -i | grep "php.ini"

  2. 在我的情况下,我结束了:configuration文件(php.ini)path=> /等

  3. 然后cd ..一路回来, cd/etc ,在我的情况下做ls 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. search[date]并确保以下行的格式正确:

    date.timezone = "Europe/Amsterdam"

我希望这可以帮助你。

目前被Crack答复的答案已经在Symfony 2.3中弃用了,并且会被删除3.0。 它应该被移到构造函数中:

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

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

在Ubuntu 13.10中检查文件:

/etc/php5/cli/php.ini

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

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

跟随sas的答案 ,PHP 5.4,Symfony 2.8,我不得不使用

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

而不是date_default_timezone_set 。 我还添加了一个调用ini_set到自定义web/config.php的顶部,以获得该检查成功。

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

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