Andreas Korthaus: /LINUX: Was tun gegen falsche Uhrzeit?

Beitrag lesen

Hi!

Jein. Da Du PHP als Modul benutzt, _ist_ PHP der Apache, der Webserver setzt sich zusammen aus dem Apache-Code und dem PHP-Code. Es gibt aus Programmausführungssicht also keinen Unterschied zwischen den beiden Komponenten.
Hendryks Ausführungen nach greift PHP ziemlich direkt auf Systemfunktionen zu, die ihrerseits dann die Umgebungsvariablen verarbeiten.

Aber die Umgebungsvarieablen erhält der Apache beim Starten und PHP über die SAPI, oder?

Dort kann ein Fehler nicht stecken, die einzige Möglichkeit wäre weiter vorne in der Kette, nämlich daß der Apache seine Umgebungsvariablen selbst ändert (wovon dann natürlich auch PHP betroffen wäre).

Ich glaube nicht dass er die ändert(wüßte zumindest nicht wie oder wo), ich glaube dass die Shell die das  apachectl Script ausführt noch nichts von der Änderung der Zeitzone mitbekommen hat - warum auch immer, denn diese habe ich ja erst kürzlich verändert.

Das passiert aber sicher nicht, denn es macht einfach keinen Sinn, TZ zu löschen.

Es ist ja BST, genau die Zone die vorher standard war. Also vermute ich wie gesagt, dass da einer noch nichts von der Änderung mitbekommen hat. Wobei /bin/sh ja kein Dämonprozess ist und sich so bei jedem Laden die Umgebungsvariablen neu holen sollte. Vielleicht  hat es auch damit zu tun dass ich nur mit SSH drauf zugreife? Also auch damit apachectl starte, und auch da /etc/localtime verändert habe...?

BTW: TZ erscheint, wenn es gesetzt ist, in phpinfo() unter "Environment" ziemlich am Ende der Seite.

Ja, wenn die steht da wenn ich sie manuell im Script setze.

export -p

TZ="Europe/Berlin"

habe ich da. Hieße das, dass dann alle Programme die ich aus eben dieser Shell starte, diese Umgebungsvariablen übergeben bekommen?

Ja, d.h. der Apache, sofern er von dort gestartet wird, sollte diese Variable übergeben bekommen.

Sollte ich dann am besten in die erste Zeile des apachectl Scriptes folgendes einfügen:

export TZ='Europe/Berlin'

Wobei ich das bisher noch gar nicht ausgeführt habe, nur hat das, wenn ich das richtig verstanden habe eh nur auswirkungen auf den aktuellen Prozess in dem ich das ausführe, oder?

Außerdem ist das ja nicht die Lösung sondern eher ein schlechter Workaround.

Ich vermute fast dass es durch einen Neustart erledigt werde, ich werde den Server morgen irgendwann in einer ruhigen Minute mal starten.

Aber: Du hast tatsächlich Recht! Wenn ich den Server direkt starte, geht es. Du meine Güte, wer kommt denn bitte auf sowas!

;-)

Ich, egal wie krank es sein mag ;)

Hat mir jedenfalls sehr geholfen. Ist wirklich erschrecken wie lange man sich mit solch doofen Problemen rumschlagen darf... aber hat ja auch was gute, hab ewieder ne Menge über Linux dazu gelernt, und mir das erste mal nähere Gedanken über die Zeitfunktionen von PHP gemacht...

Ach ja, habe mal das apachectl Script gepostet, und ich denke ich habe die Begründung:

#!/bin/sh

es wird also eine anderer Shell verwendet(glaube ich zumindest),

Jein, /bin/sh zeigt in der Regel auf die Standardshell des Systems, was wiederum meistens /bin/bash ist.

Ich dachte immer das sei eine eigene?

ls -l /bin/sh

lrwxrwxrwx    1 root     root            4 Jul  9 13:50 /bin/sh -> bash

Hast wohl schon wieder Recht...

Allerdings versucht bash sich zumindest teilweise wie sh zu verhalten, wenn als als sh aufgerufen wird. Vielleicht hilft es deshalb, wenn Du dort statt sh bash einträgst - ich glaube es allerdings nicht, denn bei mir funktioniert's mit /bin/sh.

Die Sache ist ja, dass durch #/bin/sh eine neue (Unter-)Shell geöffnet wird. Woher bezieht die denn die Umgebungsvariablen? Aus der aktuellen Shell? ODr holft die die irgendwo her? Ich könnte es mir erklären wenn es einen Dämon gäbe der evtl. von den Änderungen nichts mitbekommen hat, aber das wäre mir zumindest neu(ist also gut möglich ;-))

Ansonsten ist es mir ebenfalls schleierhaft, warum das Skript bzw. Apache im Skript TZ nicht mit auf den Weg bekommt. Vielleicht setzt Du einfach mal ein

set

an den Anfang des Skripts und probierst das mal mit /bin/sh und /bin/bash. Es sollten alle Umgebungsvariablen erscheinen. Vielleicht gibt's da ja tatsächlich einen Unterschied. Falls ja, prüfe vielleicht mal die Einstellungen Deiner Shell, die diversen Konfigurationsdateien sind in der Anleitung beschrieben (man bash).

Mache ich mal, aber vorher probiere ich es mit einem Neustart. Kann doch eigentlich nicht sein dass man die Zeitzone für alle möglichen Anwendungen extra setzen muss, die Änderungen des Lionks /etc/localtime sollte doch eigentlich ausreichen, oder?

Nochmals vielen Dank! Ich hatte schon gedacht ich sei verrückt und würde mein Lebtag date() und time() falsch verwenden ;-)

Grüße
Andreas