Просьба оставить комментарий





Если вам понравился или не понравился топик. Я что то забыл или не дописал, то вы можете оставить свой комментарий и я постараюсь исправить это в ближайшее время.

понедельник, 12 декабря 2011 г.

Удаление каталогов и всех вложенных в него файлов php старше 30 минут

На своих сайтах я использую защиту от копирования контента на основе сессий и в результате на сервере скапливается большое количество каталогов с файлами с номерами сессий. Естественно их приходиться удалять в ручную. Чтобы избавиться от этой рутинной работы я решил автоматизировать процесс с помощью PHP скрипта.

Следующая функция занимается удалением файлов и всех каталогов в указанной директории.
<?php
function removeDirectory($dir)
{
if ($objs = glob($dir."/*"))
{
foreach($objs as $obj)
{
is_dir($obj) ? removeDirectory($obj) : unlink($obj);
}
}
rmdir($dir);
}
?>
Функция нужна для того чтобы удалять как папки так и вложенные файлы, так как rmdir умеет удалять только пустые каталоги.




Далее нам необходимо определить все каталоги которые содержаться в указанной директории и после проверки на текущую и каталог уровня выше текущего ("." и ".."), что бы ненароком не затереть и весь свой сайт выполняем функцию которая описана выше.

<?php
if ($handle = opendir('../temp/')) {
    while (false !== ($entry = readdir($handle))) {
        if ($entry != "." && $entry != "..") {
        $time_sec=time();
        $time_file=filemtime("../temp/$entry");
        $time=($time_sec-$time_file)/60;
            if($time > 30)
            {
            removeDirectory("../temp/$entry");
            }
        }
    }
    closedir($handle);
}
?>

В текущем скрипте идет проверка на удаление каталогов которые старше 30 минут если нужно выбрать другое время то можно изменить условие   if($time > 30)

Далее остается только добавить задание в cron. Но в случае с cron' ом в скрипте необходимо указывать полные пути к папке так как задание запуститься, но файлы удалены не будут.

Комментариев нет:

Отправить комментарий