Symfony2 и date_default_timezone_get () - небезопасно полагаться на настройки часового пояса системы

69

У меня есть проект Symfony2. Я обновил свой php до 5.5.7 сегодня, и с тех пор я получаю

Warning: date_default_timezone_get(): It is not safe to rely on the system 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, который вы изменили
  • 2
    если вы получили это предупреждение в консоли Symfony, вам также нужно изменить его в cli / php.ini
Теги:
timezone

7 ответов

139
Лучший ответ

Возможно, вы пытаетесь установить его в 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, который должен находиться в папке app вашего каталога проектов Symfony. Перезапишите функцию __construct ниже в классе AppKernel:

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

}
  • 0
    Спасибо, но уже проверил: загруженный файл конфигурации => /usr/local/php5.5.7/lib/php.ini
  • 0
    должна быть другая конфигурация для cli, вы это тоже проверяли?
Показать ещё 17 комментариев
62

Нашел аналогичный способ исправить эту проблему (по крайней мере, для меня).

  • Сначала проверьте, где находится CLI php.ini:

    php -i | grep "php.ini"

  • В моем случае я закончил: Файл конфигурации (php.ini) Path = > /etc

  • Затем cd .. назад и cd в /etc, do ls в моем случае php.ini не появился, только php.ini.default

  • Теперь скопируйте файл php.ini.default с именем php.ini:

    sudo cp php.ini.default php.ini

  • Чтобы изменить, измените права доступа к файлу:

    sudo chmod ug+w php.ini

    sudo chgrp staff php.ini

  • Откройте каталог и отредактируйте файл php.ini:

    open .

    Совет. Если вы не можете редактировать php.ini из-за некоторых проблем с разрешениями, скопируйте 'php.ini.default' и вставьте его на свой рабочий стол и переименуйте его в 'php.ini', затем откройте его и отредактируйте это после шага 7. Затем переместите (скопируйте + вставить) его в папку /etc. Проблема будет решена.

  • Найдите [Дата] и убедитесь, что следующая строка находится в правильном формате:

    date.timezone = "Europe/Amsterdam"

Надеюсь, это поможет вам.

  • 1
    Вы только что спасли меня от серьезной головной боли. Спасибо тебе друг!
  • 7
    это должен быть принятый ответ.
Показать ещё 2 комментария
24

Текущий принятый ответ от трещины устарел в Symfony 2.3 и будет удален 3.0. Он должен быть перемещен в конструктор:

public function __construct($environment, $debug) {
    date_default_timezone_set('Europe/Warsaw');
    parent::__construct($environment, $debug);
}
  • 0
    Спасибо за этот ответ. Это решило мою проблему в версии 3
2

Проблема возникает, когда мы используем PHP 5.1 для Redhat или Cent OS

PHP 5.1 на RHEL/CentOS не поддерживает функции часового пояса

2

С PHP 5.5 существует отдельный файл php.ini для интерфейса CLI. Если вы используете консоль symfony из командной строки, то используется этот конкретный php.ini.

В Ubuntu 13.10 проверить файл:

/etc/php5/cli/php.ini

0

Следуя sas answer, PHP 5.4, Symfony 2.8, мне пришлось использовать

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

вместо date_default_timezone_set. Я также добавил вызов ini_set в начало пользовательского web/config.php, чтобы получить эту проверку для успеха.

-3

добавьте этот код в свой класс AppKernel:

public function init()
{
    date_default_timezone_set('Asia/Tehran');
    parent::init();
}
  • 0
    Начиная с версии 2.3, init не рекомендуется к удалению в версии 3.0. Вместо этого переместите свою логику в конструктор, например @Krzysztof Bociurko или обновленный принятый ответ.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню