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

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

Я проверил файл 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 часов? Если да, то как мне его исправить?

ОБНОВИТЬ

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

Сервер № 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 были одинаковые файлы и все, похоже, что плагины не загружаются в одном порядке на каждом сервере, что позволяет загружать последний плагин для определения часового пояса моего сценария.

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

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

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

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

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

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

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

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

Вот код:

 [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') на нужный часовой пояс.

Источник .

http://us.php.net/manual/en/function.date-default-timezone-get.php

Среда TZ имеет приоритет над значением по умолчанию php.ini; возможно, именно поэтому. Вы можете исправить это, явно указав date_default_timezone_set.

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

/etc/php5/cli/php.ini

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

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

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

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

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