Удаляем старые файлы

22 Июн
2009

Сегодня закончил писать один скриптик, который записывает определенные файлы в директорию. Думаю все ок. Работа сделана можно идти пить чай и смотреть дискавери. Только расслабился, и меня осенило. Хорошо, файлы записались в директорию. Пользователь воспользовался ими, а кто будет удалять их.
Как и любой нормальный человек, пустился в поиски гугл, дабы найти готовый скрипт удаления старых файлов. Конечно я не ожидал, что не найду того что мне надо. Мда.
Пришлось писать самому. И сразу же решил поделиться им с вами.

Для начало думаю расскажу про основные моменты работы скрипта.

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);
}
}

}

Компания АльпСити выполнит монтаж кровли Домодедово, гарантируя качество и долговечность работы.

Надежный и легкий в обращении скрипт магазина , сделает ваш интернет бизнес комфортным и прибыльным.

Поделиться в соц. сетях

Другое из текущей категории:

5 Ответов для Удаляем старые файлы

Avatar

Roman

Июль 18th, 2009 at 21:58

Ну вообщем-то с интересом почитал. Спасибо.

Avatar

Dmitriy

Август 29th, 2011 at 21:49

Определённо, скрипт по своей функциональности достаточно востребован.

К примеру, при создании какой либо услуги, очень часто возникает необходимость избовлятся от ряда файлов с записями, отсюдо и возникает вопрос к автору:

Каким образом, достичь результата, чтобы, удаление распространялось на определённое расширением, к примеру “txt”, потому как структура расположения файлов в одной деректории предпологает разнообразие расширений, продиктованное необходимостью.

Avatar

Евгений Карпухин

Август 29th, 2011 at 22:20

Можно просто поставить проверку на расширение файла. сейчас есть проверка по времени фала.

Нужно это
if ($time>$expire_time){

заменить на

$ext = strtolower(array_pop(explode(«.», $unlink)));
if ($ext==’txt’){

Удачи

Avatar

Dmitriy

Август 30th, 2011 at 12:00

Евгений,

спасибо за исчерпывающий ответ,
ваша правка в скрипте для расширения “txt” позволит мне избавиться от некоторых хлопот.

Avatar

Winsont

Сентябрь 8th, 2011 at 01:36

А подскажите можно ли что бы проверял в указанном каталоге все подкаталоги и там удалял файлы? Для примера каталог CACHE в нем подкатологи dom, stena, off и т.д. надо что бы пробежался по всем подкаталогам и по удалял файлы

Форма комментариев

top
встроенный шкаф купе