Когда я использую функцию 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 .
Несколько вещей, чтобы проверить:
Вот код:
[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>
Моду, который удалил вышеуказанный ответ раньше: я искал часы, чтобы найти это решение. Не удаляйте ответ только потому, что считаете, что это дублированный ответ.