Настройка 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.*.