2009-04-19 5 views
0

Auf einem Win2k-Server mit einem WAPP-Stack (Windows, Apache, PostgreSQL, PHP). Eine PHP-Webanwendung ausführen. Auch getestet mit PHP interaktive Konsole.Zeitzonenproblem PHP 5.2 Windows (WAPP-Stack)

Die Datums- bzw. Uhrzeit korrekt gemeldet, aber aus irgendeinem seltsamen Grunde ist die Zeitzone falsch gemeldet:

php -a 
<?php 
echo date('c'); 
2009-04-19T16:52:35-04:00 

C:\WAPP\php>time /t 
17:06 

C:\WAPP\php>date /t 
Sun 04/19/2009 

Der OS Zeitzone des Servers tatsächlich auf GMT-5 gesetzt ist. Ich benutzte eine (inoffizielle) DST-Reparatur und versuchte auch, php_timezonedb.dll Erweiterung zu verwenden, aber das Problem bleibt bestehen.

Dieser Server läuft auch andere Anwendungen (nicht unter meiner Kontrolle), so kann ich nicht nur die Zeit ändern. Ich könnte auch nur vorübergehend alle auf GMT-4 in der PHP-Anwendung einstellen, aber ich denke, dass es eine weniger hackische Lösung geben sollte.

Hat jemand irgendwelche Vorschläge oder kann eine ausführlichere Erklärung geben, was passiert? Ich vermute, dass es etwas mit den letzten Änderungen in DST und Windows zu tun hat, und es verursacht, dass PHP die Zeitzone nicht richtig erkennt.

Antwort

0

Sofern Sie keinen Zugriff auf die php.ini-Datei haben (Sie können dort die Zeitzone des Servers einstellen), müssen Sie die Zeitzone im Skript festlegen.

2

Sie könnten viele der Zeitzone Fragen vermeiden, indem Sie:

gmdate (string $format [, int $timestamp ]); 

Es sei denn, die date() Funktion identisch ist, dass die Zeit in GMT (Greenwich Mean Time) zurückgeführt wird.

0

Sie können die Zeitzone einstellen, die php verwendet, indem Sie die php date.timezone Variable in einem .htaccess im Anwendungsverzeichnis einstellen.

php_value date.timezone "America/Bahia" 
0

Sie haben die Zeitzone einzustellen (entweder vom PHP.ini oder mit date_default_timezone_set())

Ich vermute, wenn Sie sich auf strenge Fehlermeldung wenden, würden Sie einen Fehler über die Einstellung nicht Standardzeitzone

Jeder Aufruf zu einem Datum/Zeit-Funktion wird ein E_NOTICE erzeugen, wenn die Zeitzone nicht gültig ist, und/oder eine E_STRICT Nachricht, wenn die Systemeinstellungen oder den TZ-Umgebungsvariable verwenden. Siehe auch date_default_timezone_set()