Сегодня закончил писать один скриптик, который записывает определенные файлы в директорию. Думаю все ок. Работа сделана можно идти пить чай и смотреть дискавери. Только расслабился, и меня осенило. Хорошо, файлы записались в директорию. Пользователь воспользовался ими, а кто будет удалять их.
Как и любой нормальный человек, пустился в поиски гугл, дабы найти готовый скрипт удаления старых файлов. Конечно я не ожидал, что не найду того что мне надо. Мда.
Пришлось писать самому. И сразу же решил поделиться им с вами.
Для начало думаю расскажу про основные моменты работы скрипта.
is_dir($dir)
Эта функция проверяет является ли то что вы ввели директорией, и возвращает true в случае успеха.
if ($dh = opendir($dir)) { }
Если нам удалось открыть директорию, то продолжаем.
while (($file = readdir($dh)) !== false) { }
Читаем все элементы категории
// текущее время $time_sec=time(); // время изменения файла $time_file=filemtime($dir . $file); // тепрь узнаем сколько прошло времени (в секундах) $time=$time_sec-$time_file;
В этом куске кода, мы узнаем сколько времени прошло с даты последней модификации файла, или если файл не изменялся после создания, то с момента создания файла.
Время мы получаем в секундах.
if (is_file($unlink)){}
Это условие проверяет является ли то что возвратил цикл, файлом или это есть директория.
А затем все совсем просто.
if ($time>$expire_time){ if (unlink($unlink)){ echo 'Файл удален'; }else { echo 'Ошибка при удалении файла'; } }
Если файл старше заданной нами даты, то удалем его.
Учтите, что для удаления файлов на серверах, хостинге, требуются соответствующие права на файлы и папки.
Вот собственно говоря и скрипт:
function clear_old_files(){ $expire_time = 300; // Время через которое файл считается устаревшим (в сек.) $dir = $_SERVER['DOCUMENT_ROOT']."/tmp/"; // проверяем, что $dir - каталог if (is_dir($dir)) { // открываем каталог if ($dh = opendir($dir)) { // читаем и выводим все элементы // от первого до последнего while (($file = readdir($dh)) !== false) { // текущее время $time_sec=time(); // время изменения файла $time_file=filemtime($dir . $file); // тепрь узнаем сколько прошло времени (в секундах) $time=$time_sec-$time_file; $unlink = $_SERVER['DOCUMENT_ROOT'].'/tmp/'.$file; if (is_file($unlink)){ if ($time>$expire_time){ if (unlink($unlink)){ echo 'Файл удален'; }else { echo 'Ошибка при удалении файла'; } } } } // закрываем каталог closedir($dh); } } }
Компания АльпСити выполнит монтаж кровли Домодедово, гарантируя качество и долговечность работы.
Надежный и легкий в обращении скрипт магазина , сделает ваш интернет бизнес комфортным и прибыльным.
Ну вообщем-то с интересом почитал. Спасибо.
Определённо, скрипт по своей функциональности достаточно востребован.
К примеру, при создании какой либо услуги, очень часто возникает необходимость избовлятся от ряда файлов с записями, отсюдо и возникает вопрос к автору:
Каким образом, достичь результата, чтобы, удаление распространялось на определённое расширением, к примеру “txt”, потому как структура расположения файлов в одной деректории предпологает разнообразие расширений, продиктованное необходимостью.
Можно просто поставить проверку на расширение файла. сейчас есть проверка по времени фала.
Нужно это
if ($time>$expire_time){
заменить на
$ext = strtolower(array_pop(explode(«.», $unlink)));
if ($ext==’txt’){
Удачи
Евгений,
спасибо за исчерпывающий ответ,
ваша правка в скрипте для расширения “txt” позволит мне избавиться от некоторых хлопот.
А подскажите можно ли что бы проверял в указанном каталоге все подкаталоги и там удалял файлы? Для примера каталог CACHE в нем подкатологи dom, stena, off и т.д. надо что бы пробежался по всем подкаталогам и по удалял файлы
Вот рекурсивная функция
function removeOldFile($dir,$time_live=360){
$time= intval(time()-$time_live);
foreach (glob($dir.’/*’) as $file) {
if(is_dir($file)){
removeOldFile($file,$time_live);
}else{
if($time > filemtime($file)){
unlink($file);
}
}
}
}
Применяется так removeOldFile(‘/temps’,360); // удалить из директории /temps файлы, которые изменялись больше чем 360 секунд назад
Спасибо огромное, скрипт очень помог!