Symfony 2.7:未设置默认时区,导致致命错误

时间:2015-08-14 18:49:26

标签: php symfony timezone server

我正在尝试在共享服务器上设置 symfony 2.7 应用,并且无权限更改的php.ini

执行:php app/console doctrine:schema:drop --force

输出此警告/错误:

PHP Warning:  Uncaught exception 'Symfony\Component\Debug\Exception\ContextErrorException' with message '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.'
0 [internal function]: Symfony\Component\Debug\ErrorHandler-    >handleError(2, 'date_default_ti...', '/path...', 272, Array)
1 /domain.com/app/vendor/monolog/monolog/src/Monolog/Logger.php(272): date_default_timezone_get()
2 /domain.com/app/vendor/monolog/monolog/src/Monolog/Logger.php(481): Monolog\Logger->addRecord(100, 'Notified event ...', Array)
3 /domain.com/app/vendor/symfony/ in /domain.com/app/vendor/monolog/monolog/src/Monolog/Logger.php on line 272
PHP Fatal error:  date_default_timezone_get(): Timezone database is corrupt - this should *never* happen! in /domain.com/app/vendor/monolog/monolog/src/Monolog/Logger.php on line 272
PHP 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 /domain.com/app/vendor/monolog/monolog/src/Monolog/Logger.php on line 272
PHP Fatal error:  date_default_timezone_get(): Timezone database is corrupt - this should *never* happen! in /domain.com

我尝试了this

class AppKernel extends Kernel
{
    public function init()
    {
        date_default_timezone_set( 'Europe/Berlin' );
        parent::init();
    }
}

输出下一个错误:

PHP Fatal error:  Uncaught exception 'Symfony\Component\Debug\Exception\ContextErrorException' with message 'Notice: date_default_timezone_set(): Timezone ID 'Europe/Berlin' is invalid' in /domain.com/app/app/AppKernel.php:42

根据php.net Europe/Berlin是有效的标识符。

根据this answer timezonedb.so应该安装(不是)。

根据Symfony 1.4 docs,可以在default_timezone中设置settings.yml。我找不到>= 2.0的类似配置。 编辑“与Symfony 1.4不同,没有default_timezone配置参数来设置Symfony2中的默认时区。[...]”source

任何想法,如何解决问题?

提前致谢!

2 个答案:

答案 0 :(得分:15)

建议您在php.ini中设置时区,但如果您在共享环境中,或者由于某种原因您无法访问它,可以在app/AppKernel.php

中添加
class AppKernel extends Kernel
{
        public function __construct($environment, $debug)
        {
            date_default_timezone_set( 'America/Detroit' );
            parent::__construct($environment, $debug);
        }
}

答案 1 :(得分:1)

对我来说不那么@wonde回答没有工作我不知道为什么,这对我有用

ini_set('date.timezone', 'Europe/Berlin');

在文件中添加此行:

/web/app_dev.php

/web/app.php

如果不起作用,也要添加内核。

为我解决问题!