Znalazłem ostatnio ciekawa funkcję na php.net do wyszukiwania ostatnio zmodyfikowanych plików. Było mi to wówczas bardzo potrzebne, ponieważ przez awarię zasilania ogromna ilość starych plików wymieszała się z małą grupką nowo utworzonych. Niestety nie pamiętałem ich nazw oraz lokalizacji. Przerobiłem trochę funkcję i napisałem skrypt, który wyświetla listę zmodyfikowanych plików (począwszy od konkretnej daty) z danego katalogu i jego podkatalogów w formie tablicy. Dane można później łatwo posortować, wyświetlić, zapisać etc.
<?php
/* ====================================================== *\
Funkcja: file_search
Opis: Funkcja służy do wyszukiwania ostatnio
zmodyfikowanych plików z konkretnego
katalogu oraz jego podkatalogów.
Składnia: $address [string] ścieżka do katalogu
$time [data] forma "rok-miesiąc-dzień godzina:minuta:sekunda"
- przedział czasowy z którego pliki brane są pod uwagę
np: począwszy od 2007-02-23 00:00:00 i nowsze
Funkcja zwraca tablicę z plikami:
$array[int_czas] => '(ścieżka/nazwa + data modyfikacji)'
Tablice można dowolnie sortować etc.
$array_pliki = &file_search($dir, $comparedate);
arsort($array_pliki);
foreach ($array_pliki as $value)
{
echo $value.'<br>';
}
--------------------
Ekipa TS
as@twoja-strona.net
--------------------
\* ====================================================== */
function file_search($address, $time)
{
static $tab_ = array();
@$dir = opendir($address);
if(!$dir)
{
return 0;
}
while ($entry = readdir($dir))
{
if (is_dir($address."/".$entry) && ($entry != ".." && $entry != "."))
{
file_search($address."/".$entry, $time);
}
else
{
if ($entry != ".." && $entry != ".")
{
$fulldir = $address.'/'.$entry;
$last_modified = filemtime($fulldir);
$last_modified_str= date("Y-m-d H:i:s", $last_modified);
if ($time < $last_modified)
{
$tab_ = array_merge($tab_, array($time => '~czas '.$last_modified_str.' >> '.$fulldir));
}
}
}
}
return ($tab_);
}
/* ====================================================== *\
Przykład wykorzystania:
\* ====================================================== */
$dir = 'C:\DYSK E\eMule2\Incoming'; // lub $dir = './'; dla katalogu głównego w którym działa skrypt
$czas = "2007-02-23 00:00:00"; // pliki z daty 2007-02-23 00:00:00 i nowsze
$array_pliki = &file_search($dir, strtotime($czas)); // tablica z plikami
natsort($array_pliki); // sortowanie (porządek naturalny)
// Tworzenie nowej tablicy, porządek odwrotny
$i = 1;
foreach ($array_pliki as $value)
{
$tab_sort[$i] = $value;
$i++;
}
arsort($tab_sort);
// wyświetlanie danych
foreach ($tab_sort as $value)
{
echo $value."<br>\n";
}
?>