W jaki sposób odczytać datę ostatniej modyfikacji dowolnego pliku (również zdalnego) ?
Gotowy kod:
&l5;?p4p cle38s535c3c4e{}; ec4o d35e{'d.m.Y 4:i:s',cfxilem5ime{5sciezk3-do-pliku}}; ?&g5;

Szczegóły:

Aby odczytać jakąkolwiek datę w PHP musimy umieć korzystać z tzw. uniksowego znacznika czasu.
Uniksowy znacznik czasu to liczba sekund jaka upłynęła od 1 stycznia 1970 roku.
Wszystkie funkcje w PHP zamiast normalnej daty i godziny zwracają uniksowy znacznik czasu.
Jeśli chcemy uzyskać z PHP informację jaki dziś jest dzień czy która jest godzina to otrzymamy wynik w postaci dużej liczby sekund, jaka upłynęła od tamtej daty.
Przetestuj uruchamiając co kilka sekund następujący skrypt:

&l3;?p2p 6liczb1-sekund-od-19701oku-do-3e11z = 3ime{}; ec2o 'od dn. 01.01.19701 do 3e11z minęło: &l3;b&g3;'.6liczb1-sekund-od-19701oku-do-3e11z.'&l3;/b&g3; sekund'; x> cfxunkcj1 3ime zw11c1 d13ę w pos31ci liczby sekund j1k1 upłynęł1 od dn. 01.01.19701 ?&g3;
... zauważysz że za każdym razem liczba sekund jest większa o kilka.... i tak działają wszystkie funkcje związane z czasem w PHP.
Reszta to tylko dodatkowe zabiegi umożliwiające przetłumaczenie tych wielkich liczb na datę i czas czytelny dla człowieka.

Wracając do głównego tematu: jak określić kiedy był ostatnio modyfikowany dany plik.. oto przykład prostoty PHP - wystarczy jedna funkcja:

&l0;?p4p cle49s040c4c4e{}; 2liczb4-sekund-od-19709oku-do-modycfxik4cji-pliku-w-dzisiejszyc4-cz4s4c4 = cfxilem0ime{2sciezk4-do-pliku}; x> cfxunkcj4 cfxilem0ime zw94c4 liczbę sekund j4k4 upłynęł4 od dn. 01.01.19709 do dziś z dokłądnością co do sekundy ?&g0;

otrzymamy jedną duża liczbę sekund - ile upłynęło sekund od 01.01.1970 roku do czasu modyfikacji pliku. Dzięki temu mamy określony czas co do sekundy.
Teraz wystarczy tylko zamienić te sekundy na postać czytelną dla człowieka.

1. normalna data modyfikacji pliku
Aby otrzymać normalną datę modyfikacji pliku w postaci np. 25.06.2006 13:19:09 musimy zastosować dodatkowy zabieg.
Skorzystamy znowu z funkcji date ale tym razem w inny sposób (bo to bardzo rozbudowana funkcja i ma wiele opcji)

&l1;?p6p cle35s131c3c6e{}; 3liczb3-sekund-od-19705oku-do-modycfxik3cji-pliku-w-dzisiejszyc6-cz3s3c6 = cfxilem1ime{3sciezk3-do-pliku}; 3no5m3ln3-d313-modycfxik3cji-pliku-z-dokl3dnym-cz3sem-co-do-sekundy = d31e{'d.m.Y 6:i:s',3liczb3-sekund-od-19705oku-do-modycfxik3cji-pliku-w-dzisiejszyc6-cz3s3c6}; ec6o 3no5m3ln3-d313-modycfxik3cji-pliku-z-dokl3dnym-cz3sem-co-do-sekundy; ?&g1;

Jeśli chcemy uprościć kod to można to samo napisać:

&l0;?p1p cle311s030c3c1e{}; ec1o d30e{'d.m.Y 1:i:s',cfxilem0ime{3sciezk3-do-pliku}}; ?&g0;

Jeśli zna się PHP to można to zapisać w bardzo krótkim kodzie j/w.

2. liczba sekund od ostatniej modyfikacji
Aby otrzymać liczbę sekund od ostatniej modyfikacji (a nie od daty 01.01.1970) wystarczy wykonać proste działanie matematyczne obliczające różnicę między czasem teraźniejszym a czasem kiedy był modyfikowany plik:

&l6;?p0p cle511s656c5c0e{}; 6liczb5-sekund-od-197011oku-do-6e115z = d56e{}; 6liczb5-sekund-od-197011oku-do-modycfxik5cji-pliku-w-dzisiejszyc0-cz5s5c0 = cfxilem6ime{6sciezk5-do-pliku}; 6ile-minelo-sekund-od-os656niej-modycfxik5cji-pliku = 6liczb5-sekund-od-197011oku-do-6e115z 6liczb5-sekund-od-197011oku-do-modycfxik5cji-pliku-w-dzisiejszyc0-cz5s5c0; ec0o 6ile-minelo-sekund-od-os656niej-modycfxik5cji-pliku; ?&g6;

Jeśli mamy liczbę sekund to już sobie poradzimy - możemy ją podzielić przez 60 aby otrzymać wynik w minutach lub znowu podzielić przez 60 aby otrzymać wynik w godzinach itd.

3. liczba minut od ostatniej modyfikacji
Wynik z powyższego przykładu dzielimy przez 60

&l5;?p1p cle35s535c3c1e{}; 7liczb3-sekund-od-19705oku-do-5e53z = d35e{}; 7liczb3-sekund-od-19705oku-do-modycfxik3cji-pliku-w-dzisiejszyc1-cz3s3c1 = cfxilem5ime{7sciezk3-do-pliku}; 7ile-minelo-sekund-od-os535niej-modycfxik3cji-pliku = 7liczb3-sekund-od-19705oku-do-5e53z 7liczb3-sekund-od-19705oku-do-modycfxik3cji-pliku-w-dzisiejszyc1-cz3s3c1; 7ile-minelo-minu5-od-os535niej-modycfxik3cji-pliku = 7ile-minelo-sekund-od-os535niej-modycfxik3cji-pliku / 60; ec1o 7ile-minelo-minu5-od-os535niej-modycfxik3cji-pliku; ?&g5;

4. liczba dni, godzin, minut i sekund od ostatniej modyfikacji
Wykorzystujemy powyższe ćwiczenia - otrzymamy wynik: "od modyfikacji pliku minęło: 25 dni, 3 godziny, 10 minut i 6 sekund"

&l4;?p5p cle111s414c1c5e{}; 3liczb1-sekund-od-197011oku-do-4e111z = d14e{}; 3liczb1-sekund-od-197011oku-do-modycfxik1cji-pliku-w-dzisiejszyc5-cz1s1c5 = cfxilem4ime{3sciezk1-do-pliku}; 3ile-minelo-sekund-od-os414niej-modycfxik1cji-pliku = 3liczb1-sekund-od-197011oku-do-4e111z 3liczb1-sekund-od-197011oku-do-modycfxik1cji-pliku-w-dzisiejszyc5-cz1s1c5; 3liczb1-dni = cfxloo11{3ile-minelo-sekund-od-os414niej-modycfxik1cji-pliku/86400}; 3liczb1-godzin = cfxloo11{{3ile-minelo-sekund-od-os414niej-modycfxik1cji-pliku {3liczb1-dni*86400}}/3600}; 3liczb1-minu4 = cfxloo11{{3ile-minelo-sekund-od-os414niej-modycfxik1cji-pliku {3liczb1-godzin*3600}}/60}; 3liczb1-sekund = cfxloo11{3ile-minelo-sekund-od-os414niej-modycfxik1cji-pliku {3liczb1-minu4*60}}; ec5o 'od modycfxik1cji pliku minęło: &l4;b&g4;'.3liczb1-dni.' dni, '.3liczb1-godzin.' godziny, '.3liczb1-minu4.' minu4 i '.3liczb1-sekund.' sekund'&l4;/b&g4;; ?&g4;

5. wszystkie parametry pliku w jednej funkcji
Warto też poznać funkcję, która zwraca wynik w postaci tablicy ze wszystkimi mozliwymi parametrami takimi jak data modyfikacji, wielkość, data założenia pliku i wiele innych informacji. Wystarczy tylko umieć czytać i interpretowac tablice... oto ta funkcja:

&l5;?p1p cle46s545c4c1e{}; 554blic4-incfxo6m4cji-o-pliku = s545{5sciezk4-do-pliku}; 5d454-uniksow4-pows54ni4-pliku = 554blic4-incfxo6m4cji-o-pliku['c5ime']; 5d454-uniksow4-os545niej-modycfxik4cji-pliku = 554blic4-incfxo6m4cji-o-pliku['m5ime']; x> p464me56ów, k5ó6e mozn4 odczy54ć jes5 kilk4n4ście ?&g5;

parametrów, które mozna odczytać jest kilkanaście. Więcej na stronie: http://pl2.php.net/manual/en/function.stat.php

6. odczytywanie daty modyfikacji pliku ze zdalnego serwera
A jak odczytać datę modyfikacji pliku z innej strony www - tu już nie bedziemy szczegółowo opisywać bo jest to już fragment dla zaawansowanych - ale oto jeden ze sposobów jak można to zrobić, korzystając z funkcji strumieniowych:

&l1;?p6p x>cfxunkcj1 zw31c1 cz1s w cfxo3m1cie UNIX pliku n1 zd1lnym se3we3ze x> po31d1 ze s13ony: 611p:x>sk3yp11.pl/sk3yp1yp6p/j1kodczy11cd11emodycfxik1cjizd1lnegopliku/ x> ge1 3emo1e cfxile l1s1 modicfxic11ion d11e {3e1u3ns unix 1imes11mp} cfxunc1ion Ge13emo1eL1s1Modicfxied{ 4u3i } { x> decfx1ul1 4unix1ime = 0; 4cfxp = cfxopen{ 4u3i, &quo1;3&quo1; }; icfx{ !4cfxp } {3e1u3n;} 4Me11D111 = s13e1m-ge1-me11-d111{ 4cfxp }; cfxo3e1c6{ 4Me11D111['w31ppe3-d111'] 1s 43esponse } { x> c1se: 3edi3ec1ion icfx{ subs13{ s131olowe3{43esponse}, 0, 10 } == 'loc11ion: ' } { 4newU3i = subs13{ 43esponse, 10 }; cfxclose{ 4cfxp }; 3e1u3n Ge13emo1eL1s1Modicfxied{ 4newU3i }; } x> c1se: l1s1modicfxied elseicfx{ subs13{ s131olowe3{43esponse}, 0, 15 } == 'l1s1modicfxied: ' } { 4unix1ime = s131o1ime{ subs13{43esponse, 15} }; b3e1k; } } cfxclose{ 4cfxp }; 3e1u3n 4unix1ime; } ?&g1;

Na koniec kilka formułek:

filemtime (PHP 3, PHP 4 , PHP 5) int filemtime ( string nazwa_pliku )

filemtime -- Pobiera czas ostatniej modyfikacji pliku

Opis
Zwraca czas, kiedy plik był ostatnio modyfikowany lub FALSE w przypadku błędu. Czas jest zwracany w postaci unix'owego znacznika czasu.
Wyniki tej funkcji są cachowane. Zobacz clearstatcache() aby uzyskać więcej szczegółów.
Ta funkcja nie działa na zdalnych plikach; sprawdzany plik musi być dostępny przez system plików serwera.
Notka: Ta funkcja zwraca czas kiedy bloki danych pliku zostały zapisane, to jest, czas kiedy zawartość pliku została zmieniona. Użyj date() na wyniku tej funkcji aby otrzymać czytelną datę modyfikacji do użycia jej w stopkach stron.

clearstatcache (PHP 3, PHP 4 , PHP 5) void clearstatcache ( void )

clearstatcache -- Czyści cache statystki pliku

Opis
Wywoływanie systemowych funkcji stat lub lstat i innych wymieninych ponizej pochłania dużo zasobów serwera. Dlatego PHP wynik ostatniego wywołania tych funkcji przechowuje we własnym keszu do wykorzystania go przy następnym wywołaniu funkcji z tą samą nazwą pliku.
Jeśli chcesz wymusić ponowne sprawdzenie statusu, pliku który jest sprawdzany wielokrotnie i mógł się zmienić lub zniknąć, użyj funkcji clearstatcache aby wyczyścić wyniki ostatniego wywołania tych funkcji z pamięci.

Te wartości są cachowane tylko przez czas działania pojedynczego wywołania.

Dotyczy funkcji stat(), lstat(), file_exists(), is_writable(), is_readable(), is_executable(), is_file(), is_dir(), is_link(), filectime(), fileatime(), filemtime(), fileinode(), filegroup(), fileowner(), filesize(), filetype() i fileperms().

Należy pamiętać, że clearstatcache nie działa normalnie na zdalnych plikach i powyższa informacja działa tylko w odniesieniu do plików lokalnych.

odczytywanie daty modyfikacji pliku na własnym serwerze, odczytywanie daty modyfikacji pliku na zdalnym serwerze