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

2
якщо ви отримаєте це попередження в консолі symfony, тоді вам також потрібно змінити адресу cli / php.ini
sas

Відповіді:


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, який повинен знаходитись у папці каталогу 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);
    }

}

Дякую, але вже перевірено: Завантажений файл конфігурації => /usr/local/php5.5.7/lib/php.ini
Miloš

повинна бути інша конфігурація для cli, ви це теж перевіряли?
sas

Хм, а як знайти цю другу?
Miloš

1
перезапуск вашого apache2 передбачає також перезапуск php
sas

1
у мене була та ж проблема, і інше ваше рішення працює зі мною
Ахмед Хамді,

66

Знайшов подібний спосіб вирішити цю проблему (принаймні, це зробив для мене).

  1. Спочатку перевірте, де CLI php.iniзнаходиться:

    php -i | grep "php.ini"

  2. У моєму випадку у мене вийшло: Конфігураційний файл (php.ini) Шлях => / і т.д.

  3. Потім cd ..весь шлях назад іcd в /etc, робити lsв моєму випадку php.ini не з'являвся, тільки php.ini.default

  4. Тепер скопіюйте файл php.ini.default, названий як php.ini:

    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
Ви просто врятували мене від серйозного головного болю. Дякую, друже!
Стівен Тетро

Технічно це повинна бути правильна відповідь, оскільки вона насправді вирішує проблему на тривалий термін.
січня

25

Поточна прийнята відповідь crack застаріла в 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, існує окремий файл php.ini для інтерфейсу CLI. Якщо ви використовуєте консоль symfony з командного рядка, тоді використовується цей конкретний php.ini.

У файлі перевірки Ubuntu 13.10:

/etc/php5/cli/php.ini


1

Проблема виникає, коли ми використовуємо PHP 5.1 на Redhat або Cent OS

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


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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.