Настройка PHP timezone в php.ini

Во время работы с Symfony framework получил следующее предупреждение (warning):

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 /var/www/symfony/app/cache/prod/classes.php on line 5009

На самом деле, ничего страшного или необычного - это было вызвано обновлением PHP до версии 5.4, а так как новая версия стала рядом со старой с новыми конфигами, пришлось заново настроить PHP timezone в php.ini. Для начала, нужно узнать, в какой мы timezone. Точнее, как ее нужно указать в PHP конфиге. Сделать это можно здесь: http://www.php.net/manual/ru/timezones.europe.php

Открываем файл php.ini. У Debian это делается так:

nano /etc/php5/apache2/php.ini 

С помощью поиска ищем ;date.timezone (если такой строки нету - тогда добавляем сами). Видим, что строка закомментирована:

;date.timezone =

Раскомментируем ее и ставим локаль, например:

date.timezone = Europe/Kiev

Сохраняем файл. Так же это можно сделать у самом php-скрипте или .htaccess файле (например, на если на шаред хостинге - нельзя править php.ini). В первом случае достаточно написать в скрипте

date_default_timezone_set(’Europe/Kiev’);

Этот способ также подходит, если вы хотели сделать юзеру приятное и отображать время в зависимости от его расположения.

Во втором случае, дописываем в .htaccess (если только php не в режиме fastcgi)

php_value date.timezone ‘Europe/Kiev’

Чтобы изменения вступили в силу, необходимо перегрузить конфигурацию apache. Или перезапустить полностью. У Debian, SysVinit:

service apache2 reload

Systemd:

systemctl reload apache2

Этот способ так же работает у php 5.5, 5.6 и 7.*.