Kiedy używam funkcji PHP date()
na dwóch różnych serwerach, otrzymuję dwa różne wyniki, ale oba serwery powinny być takie same.php.ini domyślna strefa czasowa vs. data.timezone
Sprawdziłem plik php.ini
na serwerze # 1, gdzie czas jest poprawny, i wygląda następująco:
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
Sprawdziłem na serwerze # 2 i wygląda następująco:
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
Jedyna różnica jaką widzę to "Domyślna strefa czasowa".
data/czas na obu serwerach prądu wyświetlacz jak:
Server #1: 10/23/2012 09:40:39
Server #2: 10/23/2012 14:40:39
I potwierdził, że oba serwery użyć php.ini
położony w /etc
i ja również wyszukiwane obu katalogach internetowych dla każdego miejsca strefa czasowa może zostać nadpisane:
grep -r "date_default_timezone_set" *
Pod tym względem oba zawierają te same pliki z tymi samymi ustawieniami.
Czy "Domyślna strefa czasowa" jest przyczyną różnicy 5 godzin? Jeśli tak, jak mogę to poprawić?
UPDATE
Załadowane pliki konfiguracyjne.
Serwer # 2 zawiera dwa dodatkowe pliki ini:
/etc/php.d/snmp.ini
/etc/php.d/apc.ini
php opcje -i wyników.
Serwer # 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
Serwer # 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
Co ciekawe, jest to, że z jakiegoś powodu "Domyślna strefa czasowa" nie zgadza się na serwerze # 2, gdy oglądanie go przez php -i
na stronie internetowej: phpinfo()
.
ROZWIĄZANIE
Problem był z CMS i jego wtyczek. Chociaż serwer nr 1 i nr 2 miał te same pliki i wszystko, wygląda na to, że wtyczki nie są ładowane w tej samej kolejności na każdym serwerze, co umożliwiło załadowanie ostatniej wtyczki w celu określenia strefy czasowej mojego skryptu.
Przyczyną różnic php -i
i phpinfo
jest to, że po użyciu date_default_timezone_set()
ma to wpływ na to, co zostanie wydrukowane przez phpinfo()
.
Poprawka polegała na upewnieniu się, że jestem w strefie czasowej, w której musiałem być zalogowany przez date_default_timezone_set()
.Przyczyną, która nie zadziałała dla mnie, zanim opublikowałem to pytanie, było to, że zadeklarowałem to przed załadowaniem kilku wymaganych plików z CMS, które prawdopodobnie ustawiły tam strefę czasową.
Czy czas systemowy na obu serwerach jest taki sam? –
To naprawdę dobry pomysł, aby skonfigurować wszystkie serwery, aby używać UCT jako daty bazowej. Dzięki temu wszystko staje się o wiele bardziej przewidywalne. – SDC
@AlexLunix Tak, właśnie sprawdziłem i oba są takie same: 'Tue 23 października 10:03:57 CDT 2012' – NightHawk