Seite 1 von 1

getlastmod gibt nur noch aktuelles datum aus

Verfasst: 23.01.2005 09:52
von Loewenherz
Hi,
auf vielen Seiten habe ich folgendes eingebaut, um das Datum der letzten Aktualisierung auszugeben:

Code: Alles auswählen

<?php
echo date ("d M Y", getlastmod());
?>
Klappte die ganze Zeit problemlos. Seit einiger Zeit wird allerdings nur noch das aktuelle Tagesdatum ausgegeben. Ich vermute aufgrund der zeitlichen Nähe einen Zusammenhang mit dem PHP-Update meines Rootservers auf php 4.3.10. Die Dateien auf dem Server haben jedenfalls weiterhin die korrekten Daten.

Hat jemand eine Idee, woran es liegen könnte oder was ich ändern muss?

Verfasst: 23.01.2005 11:21
von Blutgerinsel
date() arbeitet korrekt !

Viel spannender ist die Frage was diese Funktion macht die einen Timestamp zurückliefert.............und damit getlastmod();
Schon mal auf die Idee gekommen das zu kontrollieren bzw. die Funktion zu debuggen ?

BTW: PHP tut genau das was man sagt nicht mehr und nicht weniger........Und irgendwelche Behauptungen aufzustellen ohne Beweise ist mehr als Irrsinn.....

Verfasst: 23.01.2005 12:29
von Loewenherz
Blutgerinsel hat geschrieben:Und irgendwelche Behauptungen aufzustellen ohne Beweise ist mehr als Irrsinn.....
???

getlastmod "Zeigt die Uhrzeit der letzten Änderung einer Seite" - wenn die Seite also beispielsweise am 22.10.2004 das letzte Mal geändert wurde und diese Zeit auch auf dem Server angezeigt wird, beim Aufruf der Seite am heutigen Tag aber "23 Jan 2005" angezeigt wird, dann kann etwas nicht stimmen, oder? Die Syntax wurde auf der Seite nie verändert und funktionierte die letzten Jahre. Und es betrifft alle Seiten, die auf dem betreffenden Server laufen.

Das obige Include ist einfach im Footer einer php-Datei, die ansonsten fast nur HTML enthält. Was sollte es da zu debuggen geben?

Verfasst: 23.01.2005 13:08
von Blutgerinsel
oh sorry seh gerade das es sich um eine eigene PHP Funktion handelt :D

Hast du die User Notes gelesen?
DO NOT use this function unless you are absolutely sure both your Apache and PHP have been compiled with the same value for -DFILE_OFFSET_BITS.

If not, this function will return the access time (or maybe even garbage) instead of the modification time due do Apache and PHP using different versions of the stat structure.

This is true regardless of Apache and PHP version.

To be on the safe side, always use the workaround already posted below:
filemtime($_SERVER['SCRIPT_FILENAME'])
Versuche mal den Workaround sonst hab ich im mom auch keine Idee

Verfasst: 23.01.2005 13:33
von MrMind
Evtl. mal ne ältere PHP Version wieder auf den Server draufspielen und testen ob es dann wieder geht, wenn ja, dann liegt es definitv an der Versionänderung. Ich würde in diesem Fall mal auf die Linux-Konsole verweisen die du mit PHP-Verwenden kannst. Diese kann auch die letzte Änderung einer Datei zurückgeben und würde in diesem Fall ausreichen.

Solange keine Benutzereingaben verwendet werden um die letzte Änderung einer Datei zu betrachten, sind auch keine großen Sicherheitsrisiken in Verbindung mit der Shell-Funktion von PHP vorhanden.


Mfg
MrMind

Verfasst: 23.01.2005 13:36
von Blutgerinsel
MrMind hat geschrieben:Evtl. mal ne ältere PHP Version wieder auf den Server draufspielen und testen ob es dann wieder geht
Davon sollte aber lieber Abstand genommen werden wegen den Sicherheitslücken die u.A. erst in späteren Versionen erkannt wurden......
Nach Möglichkeit lieber die letzte PHP 4er Version nehmen

Verfasst: 23.01.2005 13:39
von MrMind
Blutgerinsel hat geschrieben:
MrMind hat geschrieben:Evtl. mal ne ältere PHP Version wieder auf den Server draufspielen und testen ob es dann wieder geht
Davon sollte aber lieber Abstand genommen werden wegen den Sicherheitslücken die u.A. erst in späteren Versionen erkannt wurden......
Nach Möglichkeit lieber die letzte PHP 4er Version nehmen
Meinte ja nur damit, das er es zu testzwecken, die vorherige Version die er hatte drauf spielen sollte und wenn es an der Version ist, trotzalledem wieder auf die neue Updaten sollte (wegen Bugs).

Mfg
MrMind

Verfasst: 23.01.2005 13:43
von Blutgerinsel
MrMind hat geschrieben: Meinte ja nur damit, das er es zu testzwecken, die vorherige Version die er hatte drauf spielen sollte und wenn es an der Version ist, trotzalledem wieder auf die neue Updaten sollte (wegen Bugs).
Achso :D

Zur Fehleranalyse sicherlich gut aber die User Contributed Notes zu lesen und mal den Workaround mit der PHP Funktion Ausgabe zu vergleichen wird wohl weniger Aufwand bedeuten.......

Verfasst: 23.01.2005 13:48
von Loewenherz
Hi,
danke für die Antworten.
Blutgerinsel hat geschrieben: Versuche mal den Workaround sonst hab ich im mom auch keine Idee
Ist bislang auch meine einzige Vermutung. Allerdings bin ich kein PHP-Freak, sondern übersetz nur englische Programme ;-) Deshalb die Frage: wie kann ich diesen Workaround einbauen?
Er lautet also:

Code: Alles auswählen

<?php
setlocale(LC_TIME, "C");
$ft = filemtime ('referencefile');
$localt = mktime ();
$gmtt = gmmktime ();
$ft = $ft - $gmtt + $localt;
$modified = strftime ("%a, %d %b %Y %T GMT", $ft);
?>
Jetzt fehlt wohl noch die Ausgabe...
Und was tue ich hiermit:

Code: Alles auswählen

filemtime($_SERVER['SCRIPT_FILENAME'])
Wenn ich mal ganz planlos folgendes teste:

Code: Alles auswählen

<?php
setlocale(LC_TIME, "C");
$ft = filemtime ('referencefile');
$localt = mktime ();
$gmtt = gmmktime ();
$ft = $ft - $gmtt + $localt;
$modified = strftime ("%a, %d %b %Y %T GMT", $ft);
echo ($modified);
?>
Dann erhalte ich als Ausgabe:
Warning: filemtime(): Stat failed for referencefile (errno=2 - No such file or directory) in /home/htdocs/web0/html/inc/html/footer.php on line 8
Thu, 01 Jan 1970 00:00:00 GMT
Scheint also das Referenzfile zu fehlen, oder? Aber wie oder wo? *seufz*

Verfasst: 23.01.2005 14:06
von Loewenherz
Okay, ich habs:

Code: Alles auswählen

echo date("d F Y", filemtime($_SERVER["SCRIPT_FILENAME"]));
Zu empfehlen bei Apache2