[PHP] Поиск файлов по маске, выбор последнего добавленного файла

Добрый день, уважаемые читатели! Сегодня хочу познакомить вас с функцией PHP, которая позволяет искать файлы в директории по маске и выбор последнего добавленного или измененного файла.

Функция glob() позволяет искать файлы по шаблону.

От нее и будем плясать. Определяем путь к файлам, ищем все файлы, которые начинаются на «filename_» и заканчиваются на .txt


$filepath = $_SERVER['DOCUMENT_ROOT'] . '/some_directory/';

foreach(glob($filepath . 'filename_*.txt') as $file) {

// далее получаем последний добавленный/измененный файл

$LastModified[] = filemtime($file); // массив файлов со временем изменения файла

$FileName[] = $file; // массив всех файлов

}

// Сортируем массив с файлами по дате изменения

$files = array_multisort($LastModified, SORT_NUMERIC, SORT_ASC, $FileName);
$lastIndex = count($LastModified) - 1;

// И вот он наш последний добавленный или измененный файл

$LastModifiedFile =  $FileName[$lastIndex];

А теперь давайте предположим, что в этом файле список картинок, которые нужно удалить и потом удалить сам текстовый файл.

Например, список файлов, которые нужно удалить:

productname.jpg

productname-1.jpg

productname-2.jpg

Добавление нумерации к имени файла нам никак не помешает


$img_path = $_SERVER['DOCUMENT_ROOT'] . '/some_image_directory/';

$log = '';

echo 'Список файлов на удаление: <br />';
// получаем последний файл
foreach(glob($filepath . 'filename_*.txt') as $file) {

$LastModified[] = filemtime($file);
 $FileName[] = $file;

echo '<span style="font-weight: bold;">' . $file . '</span><br />';

$imglist = file($file);

foreach($imglist as $img) {

$img_file = str_replace('.jpg', '', $img);
 $pattern = trim($img_file) . '*';

foreach(glob($img_path . $pattern) as $imgName) {

if(file_exists($imgName)) {
 unlink($imgName);
 $log = ' [x] <span style="font-size: 8px;">удален ' . date("d-m-Y H:i:s") . '</span>';
 }

}

echo '<span style="font-weight: bold; padding-left: 10px;">--' . $img . '</span>' . $log . '<br/>';

}

if(file_exists($file)) {
 unlink($file);
 }

}

if(is_array($FileName)) {
 $files = array_multisort($LastModified, SORT_NUMERIC, SORT_ASC, $FileName);
 $lastIndex = count($LastModified) - 1;

// форматируем дату и время изменения файла с учетом текущей локали
 $lastTime = strftime ("%k:%M:%S %e %B %Y",$LastModified[$lastIndex]);

$LastModifiedFile = $FileName[$lastIndex];
} else {
 echo 'Не найдено файлов на удаление!';
}

Таким образом мы сначала получаем список текстовых файлов и изображений; удаляем все изображения по маске названия файла картинки из текстового файла и выводим сообщения об этом.

Все просто! Если есть какие-нибудь вопросы — милости просим в комментарии

3 комментария

Leave a Reply