Czytam folder z dużą ilością plików.
Jak mogę uzyskać datę utworzenia pliku. Nie widzę żadnej bezpośredniej funkcji, aby to uzyskać.
Są filemtime
i filectime
.
A jeśli plik nie został zmodyfikowany, co się stanie?
Użyj filectime . Dla Windows zwróci czas utworzenia , a dla Uniksa czas zmiany, który jest najlepszy, jaki można uzyskać, ponieważ na Uniksie nie ma czasu utworzenia (w większości systemów plików).
Zauważ również, że w niektórych tekstach uniksowych ctime pliku jest określane jako czas utworzenia pliku. To jest źle. W większości uniksowych systemów plików nie ma czasu na tworzenie plików Uniksa.
filemtime
dla Linuksa jest lepsza, bardziej precyzyjna, jakfilectime
zmienia się podczas właściciela, zmiana uprawnień jak w przypadku innych operacji. Będziesz mieć więcej szans na uzyskanie czasu tworzenia w systemie Linux za pomocąfilemtime
To jest przykładowy kod zaczerpnięty z dokumentacji PHP tutaj: 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)); }
Kod określa nazwę pliku, następnie sprawdza, czy istnieje, a następnie wyświetla czas modyfikacji za pomocą
filemtime()
.filemtime()
przyjmuje 1 parametr, który jest ścieżką do pliku, może to być względne lub bezwzględne.źródło
filemtime()
zwraca czas modyfikacji.Niestety, jeśli używasz Linuksa, nie możesz uzyskać dostępu do informacji, ponieważ przechowywana jest tylko data ostatniej modyfikacji.
Zależy to nieco od twojego systemu plików. Wiem, że ext2 i ext3 nie obsługują czasu tworzenia, ale myślę, że ext4 tak.
źródło
Wiem, że ten temat jest super stary, ale na wypadek gdyby ktoś szukał odpowiedzi tak jak ja zamieszczam swoje rozwiązanie.
To rozwiązanie działa, JEŚLI nie masz nic przeciwko posiadaniu dodatkowych danych na początku pliku.
Zasadniczo chodzi o to, aby, jeśli plik nie istnieje, utworzyć go i dołączyć bieżącą datę w pierwszym wierszu. Następnie możesz przeczytać pierwszy wiersz
fgets(fopen($file, 'r'))
, zamienić go wDateTime
obiekt lub cokolwiek (oczywiście możesz go użyć w stanie surowym, chyba że zapisałeś go w dziwnym formacie) i voila - masz datę utworzenia! Na przykład mój skrypt odświeżający plik dziennika co 30 dni wygląda następująco: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); } }
źródło