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

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

Я проверил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(), Причина, по которой я не работал до того, как я опубликовал этот вопрос, заключалась в том, что я объявил об этом до загрузки нескольких необходимых файлов из CMS, что, вероятно, снова установило там часовой пояс.

 SDC23 окт. 2012 г., 17:04
это действительно хорошая идея, чтобы настроить все ваши серверы для использования UCT в качестве базовой даты. Это делает все намного более предсказуемым.
 John V.23 окт. 2012 г., 17:03
Системное время на обоих серверах одинаковое?
 Megamind Saiko18 июн. 2017 г., 17:57
У меня была такая же проблема, и я обнаружил, что конфигурации Laravel перезаписывают часовой пояс по умолчанию в php.ini
 NightHawk23 окт. 2012 г., 17:07
@SDC Да, я согласен. На данный момент я просто пытаюсь заставить их быть такими же. Если я могу сделать это, я могу установить их в UTC.
 NightHawk23 окт. 2012 г., 17:04
@AlexLunix Да, я только что проверил, и они оба одинаковы:Tue Oct 23 10:03:57 CDT 2012

Ответы на вопрос(6)

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

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

Вот код:

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

Источник.

 Owen Beresford05 февр. 2014 г., 15:30
Что делают скобки в первой строке? Документы не имеют их ...

Проверьте значение «Loaded Configuration File» в выходных данных phpinfo (), чтобы убедиться, что вы меняете правильный файл php.ini. (Это укусило меня не раз!)Просматривая вывод phpinfo (), проверьте строку «Анализ дополнительных INI-файлов», чтобы узнать, анализируются ли дополнительные INI-файлы при запуске через ваш веб-сервер.date.timezone может быть установлен с помощью функции ini_set. У вас есть код, который это делает? Обязательно проверьте любой код, который может быть запущен из-за настройки ini auto_prepend.
 NightHawk23 окт. 2012 г., 18:52
[2.] Я просмотрел оба файла, и в них нет времени. [3.] Я выполнил поиск на обоих серверах и толькоini_set функции, которые я видел, связаны с отображением ошибок.
 macio.Jun29 авг. 2013 г., 20:58
+1 для проверки «Загруженный файл конфигурации» в phpinfo ()
 bradym23 окт. 2012 г., 18:25
[2] Эти ini-файлы не должны иметь ничего для date.timezone, но я бы всё равно проверил. [3] Закрыть, искать вызовы функций ini_set -php.net/ini_set
 NightHawk23 окт. 2012 г., 17:41
[1.] Просто дважды проверил еще раз, и да, они оба загружены из/etc/php.ini [2.] Я заметил, что на сервере № 2 есть два дополнительных INI-файла:snmp.ini а такжеapc.ini, [3.] Буду ли я искать что-то вродеinit_set(date.timezone?
Решение Вопроса

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

я верю с PHP> 5.2 вы должны получить:

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

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

 Jason McCreary23 окт. 2012 г., 17:17
Это не установлено где-то, следовательно,Default timezone UTC на сервере № 2.
 NightHawk23 окт. 2012 г., 17:10
date.timezone устанавливается внутри php.ini. И им обоим присвоено одинаковое значение на обоих серверах. Я не уверен, где установлен «часовой пояс по умолчанию».
 Jason McCreary23 окт. 2012 г., 17:21
Вы уверены, что INI одинаковы? Запустите следующее на обоих серверах:php -i | grep timezone
 NightHawk23 окт. 2012 г., 17:17
Куда мне пойти установить это? Или где я могу пойти на сервер № 1, чтобы сбросить это?
 SDC23 окт. 2012 г., 17:11
+1 за рекомендацию класса DateTime. Он не так сильно запутывается в часовых поясах, как старые функции обработки дат. И это гораздо более функционально.date() и его друзья должны быть брошены в яму и никогда не возвращаться.

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

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

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

был установлен в:

/etc/php5/cli/php.ini

Я мог тогда проверить с:

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

 Pascal_dher18 апр. 2016 г., 14:27
Для интерфейса командной строки (cli) да. Но настройки apache web php находятся в /etc/php5/apache2/php.ini

Ваш ответ на вопрос