Czytam folder z dużą ilością plików.
Jak mogę uzyskać datę utworzenia pliku. Nie widzę żadnej bezpośredniej funkcji, aby to uzyskać.
Są filemtimei filectime.
A jeśli plik nie został zmodyfikowany, co się stanie?
Odpowiedzi:
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.
filemtimedla Linuksa jest lepsza, bardziej precyzyjna, jak filectimezmienia 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.
filemtime()zwraca czas modyfikacji.
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 w DateTimeobiekt 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);
}
}