Удаление каталогов и всех вложенных в него файлов 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' ом в скрипте необходимо указывать полные пути к папке так как задание запуститься, но файлы удалены не будут.
Следующая функция занимается удалением файлов и всех каталогов в указанной директории.
<?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' ом в скрипте необходимо указывать полные пути к папке так как задание запуститься, но файлы удалены не будут.
Комментарии
Отправить комментарий