PHP: jak mogę sprawdzić datę utworzenia pliku?

84

Czytam folder z dużą ilością plików.

Jak mogę uzyskać datę utworzenia pliku. Nie widzę żadnej bezpośredniej funkcji, aby to uzyskać.

filemtimei filectime.

A jeśli plik nie został zmodyfikowany, co się stanie?

zod
źródło

Odpowiedzi:

111

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.

Alin Purcaru
źródło
Zwraca czas ostatniej zmiany pliku lub FALSE w przypadku niepowodzenia. Czas jest zwracany jako uniksowy znacznik czasu.
zod
@zod Jeśli przeczytasz trochę dalej niż w pierwszych wierszach, być może zrozumiesz więcej. Wejdź też trochę w komentarze.
Alin Purcaru
To nie jest data utworzenia. To wszystko, co powiedziałem :-)
zod
11
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
Fedir RYKHTIK
Czy byłoby szybsze uruchomienie tej funkcji php, czy też pobranie pola MySQL do ostatniej aktualizacji? W moim przypadku ścieżka obrazu jest przechowywana w DB i już uruchamia zapytanie wybierające
drooh
17

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.

Rakesh Dongarwar
źródło
4
Rakesh, proszę, wyjaśnij swój kod, nie wysyłaj tylko kodu i oczekuj, że ludzie go zrozumieją.
Persijn,
2
Chociaż ten post zawierający tylko kod może odpowiedzieć na pytanie, dodaj wyjaśnienie, dlaczego tak się dzieje. Pomoże to przyszłym czytelnikom ocenić odpowiedź na ich sytuację.
Tom Brunberg,
1
Funkcja filemtime()zwraca czas modyfikacji.
Stefan
Michael, ponieważ znaczenie funkcji filemtime () nie jest oczywiste, kod zasługuje na komentarz.
Radium
Kod określa nazwę pliku, a następnie sprawdza, czy istnieje, a następnie wyświetla czas modyfikacji za pomocą funkcji filemtime (). filemtime () przyjmuje 1 parametr, który jest ścieżką do pliku, może to być względna lub bezwzględna.Powyższy przykład jest skopiowany z dokumentacji PHP tutaj php.net/manual/en/function.filemtime.php
Harvey Dobson
8

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.

mrwooster
źródło
-3

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);
            }
        }
SDukla
źródło
5
Dlaczego musisz zmodyfikować lub nawet usunąć plik, aby uzyskać datę? To nie brzmi, jakby to było rozwiązanie pierwotnego problemu
Nico Haase