PHP: Wie kann ich das Erstellungsdatum der Datei ermitteln?

82

Ich lese einen Ordner mit vielen Dateien.

Wie kann ich das Erstellungsdatum einer Datei ermitteln? Ich sehe keine direkte Funktion, um es zu bekommen.

Es gibt filemtimeund filectime.

Und wenn die Datei nicht geändert wurde, was passiert dann?

zod
quelle

Antworten:

111

Verwenden Sie Filectime . Unter Windows wird die Erstellungszeit und unter Unix die Änderungszeit zurückgegeben, die die beste ist, die Sie erhalten können, da unter Unix keine Erstellungszeit vorhanden ist (in den meisten Dateisystemen).

Beachten Sie auch, dass in einigen Unix-Texten die ctime einer Datei als Erstellungszeit der Datei bezeichnet wird. Das ist falsch. In den meisten Unix-Dateisystemen gibt es keine Erstellungszeit für Unix-Dateien.

Alin Purcaru
quelle
Gibt die Zeit zurück, zu der die Datei zuletzt geändert wurde, oder FALSE bei einem Fehler. Die Zeit wird als Unix-Zeitstempel zurückgegeben.
Zod
@zod Wenn Sie etwas weiter als die ersten Zeilen lesen, verstehen Sie möglicherweise mehr. Gehen Sie auch ein wenig in die Kommentare.
Alin Purcaru
Das ist kein Erstellungsdatum. Das ist alles was ich gesagt habe :-)
zod
11
filemtimefür Linux ist besser, genauer, wie filectimewährend des Besitzers geändert, Berechtigungsänderung wie bei anderen Operationen. Sie werden mehr Chancen bekommen, Erstellungszeit unter Linux mitfilemtime
Fedir RYKHTIK
Wäre es schneller, diese PHP-Funktion auszuführen oder ein MySQL-Feld für die letzte Aktualisierung abzurufen? In meinem Fall ist der
Bildpfad in der
15

Dies ist der Beispielcode aus der PHP-Dokumentation hier: https://www.php.net/manual/en/function.filemtime.php

// outputs e.g.  somefile.txt was last changed: December 29 2002 22:16:23.

$filename = 'somefile.txt';

if (file_exists($filename)) {

    echo "$filename was last modified: " . date ("F d Y H:i:s.", filemtime($filename));
}

Der Code gibt den Dateinamen an, prüft dann, ob er vorhanden ist, und zeigt dann die Änderungszeit mit an filemtime().

filemtime() Nimmt 1 Parameter, der der Pfad zur Datei ist, kann dies relativ oder absolut sein.

Rakesh Dongarwar
quelle
4
Rakesh, bitte erkläre deinen Code, poste nicht nur einen Code und erwarte, dass die Leute ihn verstehen.
Persijn
2
Während dieser Nur-Code-Beitrag möglicherweise die Frage beantwortet, fügen Sie bitte eine Erklärung hinzu, warum dies so ist. Dies wird zukünftigen Lesern helfen, die Antwort auf ihre Situation zu bewerten.
Tom Brunberg
1
Die Funktion filemtime()gibt die Änderungszeit zurück.
Stefan
Michael, da die Bedeutung der Funktion filemtime () nicht offensichtlich ist, verdient der Code einen Kommentar.
Radium
Der Code gibt den Dateinamen an, prüft dann, ob er vorhanden ist, und zeigt dann die Änderungszeit mit filemtime () an. filemtime () verwendet 1 Parameter, der den Pfad zur Datei darstellt. Dies kann relativ oder absolut sein. Das obige Beispiel wurde aus der PHP-Dokumentation hier kopiert. php.net/manual/en/function.filemtime.php
Harvey Dobson
8

Wenn Sie unter Linux arbeiten, können Sie leider nicht auf die Informationen zugreifen, da nur das Datum der letzten Änderung gespeichert wird.

Es hängt etwas von Ihrem Dateisystem ab. Ich weiß, dass ext2 und ext3 die Erstellungszeit nicht unterstützen, aber ich denke, dass ext4 dies tut.

mrwooster
quelle
-3

Ich weiß, dass dieses Thema sehr alt ist, aber falls jemand wie ich nach einer Antwort sucht, veröffentliche ich meine Lösung.

Diese Lösung funktioniert, wenn es Ihnen nichts ausmacht, am Anfang Ihrer Datei zusätzliche Daten zu haben.

Grundsätzlich besteht die Idee darin, wenn keine Datei vorhanden ist, diese zu erstellen und das aktuelle Datum in die erste Zeile einzufügen. Als nächstes können Sie die erste Zeile mit lesen fgets(fopen($file, 'r')), sie in ein DateTimeObjekt oder etwas anderes verwandeln (Sie können sie natürlich roh verwenden, es sei denn, Sie haben sie in einem seltsamen Format gespeichert) und voila - Sie haben Ihr Erstellungsdatum! Zum Beispiel sieht mein Skript zum Aktualisieren meiner Protokolldatei alle 30 Tage folgendermaßen aus:

if (file_exists($logfile)) {
            $now = new DateTime();
            $date_created = fgets(fopen($logfile, 'r'));
            if ($date_created == '') {
                file_put_contents($logfile, date('Y-m-d H:i:s').PHP_EOL, FILE_APPEND | LOCK_EX);
            }
            $date_created = new DateTime($date_created);
            $expiry = $date_created->modify('+ 30 days');
            if ($now >= $expiry) {
                unlink($logfile);
            }
        }
SDukla
quelle
5
Warum müssen Sie eine Datei ändern oder sogar löschen, um das Datum zu erhalten? Das hört sich nicht so an, als wäre dies eine Lösung für das ursprüngliche Problem
Nico Haase