Часовой пояс php.ini по умолчанию против date.timezone - программирование
Подтвердить что ты не робот

Часовой пояс php.ini по умолчанию против date.timezone

Когда я использую функцию PHP date() на двух разных серверах, я получаю два разных результата, но оба сервера должны быть одинаковыми.

Я проверил файл php.ini на сервере # 1, где время верное, и выглядит следующим образом:

date/time support                   enabled
"Olson" Timezone Database Version   0.system
Timezone Database                   internal
Default timezone                    America/Chicago

Directive        Local Value        Master Value
---------------------------------------------------
date.timezone    America/Chicago    America/Chicago

Я проверил сервер # 2 и выглядит следующим образом:

date/time support                   enabled
"Olson" Timezone Database Version   0.system
Timezone Database                   internal
Default timezone                    UTC

Directive        Local Value        Master Value
---------------------------------------------------
date.timezone    America/Chicago    America/Chicago

Единственное отличие, которое я вижу, это значение "Значение по умолчанию".

Дата/время для отображения обоих серверов:

Server #1: 10/23/2012 09:40:39
Server #2: 10/23/2012 14:40:39

Я подтвердил, что оба сервера используют php.ini, расположенный внутри /etc, и я также искал оба веб-каталога для любого места, где временная зона может быть перезаписана:

grep -r "date_default_timezone_set" *

Но в этом отношении оба они содержат одинаковые файлы с одинаковыми настройками.

Является ли "часовой пояс по умолчанию" тем, что вызывает разницу в 5 часов? Если да, то как его исправить?

UPDATE

Загруженные файлы конфигурации.

Сервер № 2 содержит два дополнительных INI файла:

/etc/php.d/snmp.ini
/etc/php.d/apc.ini

php -i.

Сервер # 1:

date/time support => enabled
"Olson" Timezone Database Version => 0.system
Timezone Database => internal
Default timezone => America/Chicago

Directive => Local Value => Master Value
date.timezone => America/Chicago => America/Chicago

Сервер # 2:

date/time support => enabled
"Olson" Timezone Database Version => 0.system
Timezone Database => internal
Default timezone => America/Chicago

Directive => Local Value => Master Value
date.timezone => America/Chicago => America/Chicago

Интересно отметить, что по какой-то причине "Часовой пояс по умолчанию" не совпадает на сервере №2 при просмотре через php -i по сравнению с phpinfo() на веб-странице.

Решение

Проблема была в CMS и его плагинах. Хотя на серверах # 1 и # 2 были одинаковые файлы и все, оказалось, что плагины не загружаются в том же порядке на каждом сервере, что позволило последнему подключенному плагину определить часовой пояс моего script.

Причина php -i и phpinfo отличается тем, что после использования date_default_timezone_set() это влияет на то, что будет печатать phpinfo().

Исправление было гарантией того, что я нахожусь в часовом поясе, в котором мне нужно было пройти через date_default_timezone_set(). Причина, по которой я не работал, прежде чем я разместил этот вопрос, состоял в том, что я объявил об этом до загрузки нескольких необходимых файлов из CMS, которые, вероятно, снова установили там часовой пояс.

4b9b3361

Ответ 1

date() опирается на date.timezone Настройка INI. Поскольку один из них - Чикаго (CT), а другой - UTC, это ваша разница в 5 часов.

Я считаю, что с PHP > 5.2 вы должны получить:

PHP Предупреждение: Неизвестно: безопасно полагаться на системный часовой пояс Настройки. Вы должны использовать настройку date.timezone или date_default_timezone_set().

Я бы посоветовал вам взглянуть на новый объект DateTime или использовать UTC в соответствии с рекомендациями SDC.

Ответ 2

Несколько вещей, чтобы проверить:

  • Проверьте значение "Загруженный файл конфигурации" на вашем выходе phpinfo(), чтобы убедиться, что вы изменяете правильный файл php.ini. (Это укусило меня не один раз!)
  • При просмотре вывода phpinfo() проверьте строку "Дополнительные файлы с расширением .ini", чтобы увидеть, есть ли дополнительные файлы ini, которые обрабатываются при запуске через ваш веб-сервер.
  • date.timezone можно установить через функцию ini_set. У вас есть код, который делает это? Обязательно проверьте любой код, который может быть запущен из-за установки auto_prepend ini.

Ответ 3

Вот код:

[Date]
date.timezone = ('America/New_York')

date.default_latitude = 31.7667

date.default_longitude = 35.2333

date.sunrise_zenith = 90.583333

date.sunset_zenith = 90.583333

Просто измените date.timezone = ('America/New_York') на нужный часовой пояс.

Источник.

Ответ 5

Использование Ubuntu 14.0 LTS Часовой пояс по умолчанию в моем случае был установлен в:

/etc/php5/cli/php.ini

Затем я мог бы проверить:

php -i | grep "часовой пояс"

Ответ 6

Если вы устанавливаете значение date.timezone в php.ini, но оно не работает (то есть локальное значение и значение мастера различаются), вам может потребоваться обновить что-то вроде этого в файле конфигурации apache:

<IfModule mod_php5.c>
   php_value date.timezone "Europe/Paris"
</IfModule>

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