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 filemtime
und filectime
.
Und wenn die Datei nicht geändert wurde, was passiert dann?
Antworten:
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.
filemtime
für Linux ist besser, genauer, wie filectime
während des Besitzers geändert, Berechtigungsänderung wie bei anderen Operationen. Sie werden mehr Chancen bekommen, Erstellungszeit unter Linux mitfilemtime
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.
filemtime()
gibt die Änderungszeit zurück.
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.
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 DateTime
Objekt 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);
}
}