как сделать удаление файлов по дате создания или по шаблону?

iskif

Профессор
Регистрация
21 Авг 2006
Сообщения
373
Реакции
49
Добрый день.
автоматически (парсинг) наполняю сайт событиями (текст + картинка)
Возникла необходимость удалять "устаревшие" картинки.
Подскажите, пожалуйста, какой код дописать в парсер, чтоб он удалял все файлы из заданных папок с датой создания "-3 недели" от текущей даты?
Или удалял все файлы, у которых начало имени меньше текущей даты на 21, но это гораздо сложнее по-моему. Но если проще, то картинки именуются по такому шаблону:
/images/events/thumb/small/20130724_Name_0.jpg
/images/events/thumb/20130724_Name_0.jpg
/images/events/20130724_Name_0.jpg
 
Дату последней модификации можно получить функцией filemtime(), текущее - time(), и проверяешь разность, если она больше или равна 21*24*60*60, удаляешь файл функцией unlink().
 
Добрый день.
автоматически (парсинг) наполняю сайт событиями (текст + картинка)
Возникла необходимость удалять "устаревшие" картинки.
Подскажите, пожалуйста, какой код дописать в парсер, чтоб он удалял все файлы из заданных папок с датой создания "-3 недели" от текущей даты?

PHP:
<?php
$dir = "images/";
$imageExt = array("png","jpg","gif");
$t = time();
 
if(file_exists($dir))
{
    $files = scandir($dir);
 
 
    for($i = 2; $i < count($files); $i++)
    {
 
        if(in_array(strtolower(pathinfo($files[$i], PATHINFO_EXTENSION)),$imageExt))
        {
     
            $fTime = $t-filemtime($dir.$files[$i]);
     
            $fTime = floor($fTime/60/60/24);
     
            if($fTime >= 21)
            {
         
                unlink($dir.$files[$i]);
                echo "deleting:".$dir.$files[$i]." <br>";
            } 
        }
    }
}else{
    echo "NO DIRECTORY SPECIFIED";
}
?>

Спасибо, работает!
Только удаляет файлы через один - это так задумано или побочный эффект?(не принципиально, за несколько проходов удалит всё, просто интересно :) )

и ещё вопрос:
в поддиректориях файлы не удаляются - возможно просто продублировать код ещё два раза, меняя только путь или надо разделить по файлам и запускать по-отдельности?


Для просмотра ссылки Войди или Зарегистрируйся
 
Спасибо, работает!
Только удаляет файлы через один - это так задумано или побочный эффект?(не принципиально, за несколько проходов удалит всё, просто интересно :) )

и ещё вопрос:
в поддиректориях файлы не удаляются - возможно просто продублировать код ещё два раза, меняя только путь или надо разделить по файлам и запускать по-отдельности?
 
если есть доступ к cron'у, поставь задание
Код:
find /images/ -name '*.gif' -ctime +21 -delete
удалить все gif'ки созданые раньше 21 дня назад

Отлично! это ещё лучше.
Только эксперимент показал, что лучше использовать -mtime
Ctime - это дата изменения прав доступа, mtime - изменение содержимого
 
Назад
Сверху