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

Symfony 2.7: default timezone not set, causing fatal error

我正在尝试在 共享服务器 上设置基于 symfony 2.7 的应用程序,但 没有权限 改为 php.ini.

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

输出这个 warnings/errors:

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 可以在 settings.yml 中设置 default_timezone。我找不到 >= 2.0 的类似配置。 编辑"Unlike Symfony 1.4, there isn’t a default_timezone config parameter to set the default timezone in Symfony2. [...]" (source)

有什么想法,如何解决问题?

提前致谢!

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

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

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

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

在您的文件中添加这一行:

/web/app_dev.php

/web/app.php

如果这不起作用,也添加到您的内核中。

这解决了我的问题!