php скрипт удаления старых файлов из директории

Статус
В этой теме нельзя размещать новые ответы.
на шелле можно сделать одной командой
find /путь/к/дире/ -atime +2w -delete
и поставить её в крон
будет удалять все файлы страше 2-ух недель
и не надо никаких пхп скриптов писать:ah:
Дык ведь нужно (к примеру) 300 секунд, с момента появления файла в директории. А у фрихостов вообще крон не предоставляется.
Нужно что-то типа:
Если файл есть (и есть строка) - строка переписывается (как вариант: удаляется и добавляется в конец файла),
если файл есть (и нет строки) - строка добавляется,
если файл удаляется - строка удаляется.

Помогите изобразить ?
 
Наверное, можно и не создавать никакую базу, если воспользоваться функцией filemtime .
Вот скрипт, который читает все файлы в директории :
PHP:
 $dir="./download";  //читаем эту директорию

if($OpenDir=opendir($dir))
 {
 while(($file=readdir($OpenDir)) !== false)
 if($file != "." && $file != "..")
 echo $file . "<br>";
 }
else echo "нет прав";

Помогите изобразить скрипт, который при условии, что файл создан более (к примеру 300 сек) удаляет старый файл из директории.
 
примерно так
PHP:
$dir="./ZZZZ";  //читаем эту директорию
$todel=300; // время на удаление
if($OpenDir=opendir($dir)){
	while(($file=readdir($OpenDir)) !== false){
		if ($file != "." && $file != ".."){
			$dtime=intval(time()-filectime("{$dir}/{$file}"));
			if ($dtime>=$todel) unlink("{$dir}/{$file}");
		}
	}
	closedir($OpenDir); 
}
 
Код:
          if ($d = @opendir($dir)) { //$dir - путь к дериктории
            while (($file = readdir($d)) !== false) { //считываем дерикторию
              if (substr($file,0,4)=="PDF_"){ //смотрим по маске файлы. за ненадобностью можно и убрать
                // проверяем давность создания файла
                $ftime = filemtime($dir.'/'.$file); // смотрим время создания
                if (time()-$ftime > 3600){ //3600 - 1 час. Время в сек. 
                  unlink($dir.'/'.$file); //если больше требуемого времени удаляем
                }
              }
            }  
            closedir($d);
          }
 
Помогите ещё разок

Есть файл с базой в формате:
хххххх|ххххх|ххххх|5e691d130770a96d98a82324e15.php
Файл лежит по адресу _ttp://localhost/BASE/5e691d130770a96d98a82324e15.php
Файл с базой лежит _ttp://localhost/BASE/base.txt
Есть скрипт в корне сайта: (file.php)
PHP:
if ($id != "") 
{ 
$id--; 
$file=file("BASE/base.txt"); 
$fp=fopen("BASE/base.txt","w");
$razmer=sizeof($file);
$n=$razmer-1;
$str=explode("|", $file[$n]);
for($i=0;$i<sizeof($file);$i++) 
{ 
if($i==$id) 
{ 
unset($file[$i]); 
} 
} 
fputs($fp,implode("",$file)); 
fclose($fp); 
}
При обращении к скрипту file.php?=1 удаляется строка номер 1.
Что нужно в него добавить, чтоб он удалял cначала файл _ttp://localhost/BASE/5e691d130770a96d98a82324e15.php
PHP:
unset($str[3]);
записанный в последней позиции строки, а потом уже саму строку ?
 
Нужен РНР скрипт, способный при запуске, удалять из заданной директории файлы старше (такого-то) времени создания.
Попутно, хочу спросить, можно ли запускать этот скрипт при закрытии сессии юзером. Если "да", то как ?

Сам как раз написал такой скрипт. Но там в базе данных время создания хранится, и скрипт просто его сравнивает с текщем временем + 3600 - старше часа удаляются файлы. Крон его гоняет раз в 10 минут.

В базе время кстати автоматически записывается при INSERT туда новой строки.
 
Здесь вот предлагают решение на php оно и понятно, такой топик, но есть решение лучше, если хостинг на базе unix, а обычно это так и разрешено выполнение exec - что безусловно реже.

В папке где нужно удалить файлы можно сделать exec("find -mtime +20 -delete"); - это удалит все файлы старше 20 дней. Если более точно даты с датой модификации больше чем 20 дней.

Не совсем по теме, но все-же, думаю, нужно знать об альтернативных решениях в одну строку.
 
Согласен, что задачу удаления файлов можно поручить и крону, если нужно получить большой временной интервал.
Только изначально планировалось, что файлы должны удаляться, если они старше (пусть) 5-и минут. Акаждую минуту дёргать крон - это немножко не корректно !
И всёже, кто может подсказать что нужно дописать в скрипте, чтоб он выполнял действие описанное в 15 топике ?
 
Помогите ещё разок

Что-то я совсем запутался с этой функцией удаления...
Вот скрипт: (file.php)
PHP:
if ($id != "") 
{ 
$id--; 
$file=file("BASE/base.txt"); // находим файл базы
$fp=fopen("BASE/base.txt","w"); //открываем его
$razmer=sizeof($file); 
$n=$razmer-1;
$str=explode("|", $file[$n]);
$ss=($str[3]);
$urr=("BASE/"); //директория базы
$fff=($urr.$ss); //путь до удаляемого файла
for($i=0;$i<sizeof($file);$i++) 
{ 
if($i==$id) 
{ 
echo $fff  ;         // строка В (путь рисуется правильный)
unlink($fff);        //строка Б ???????????
#unset($file[$i]); //строка А (удаляет заданную строку)
} 
} 
fputs($fp,implode("",$file)); 
fclose($fp); 
}
При обращении к нему, file.php?id=1 , удаляет 1-ю строку из базы (если расскомментирована строка А) base.txt формата :
Код:
хххххх|ххххх|ххххх|aaaaaaaaa.php
хххххх|ххххх|ххххх|bbbbbbbbbbb.php
хххххх|ххххх|ххххх|ccccccccccc.php
Что нужно вставить в строку Б , чтоб скрипт сначала удалял файл указанный в переменной $ss ?
Помогите, пожалуйста !
 
Еще команда удаления старых файлов для Linux. Взято отсюда: Для просмотра ссылки Войди или Зарегистрируйся
Код:
Удаление старых файлов в Linux
11 Apr 2009 Никогда не приходилось писать скрипты для удаления каких-нибудь старых файлов под Linux? Как это сделать проще? Ну вот, например, как-то так:
find /var/log -mtime +60 -type f -exec rm -rf {} \;
В данном примере будут рекурсивно удалены все файлы в каталоге /var/log, чья дата изменения старше 60ти дней.
Вместо +60, вставьте желаемое число. Эту строку запускать по крону раз в сутки.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху