Php удалить файлы старше n дней

Обновлено: 07.07.2024

Права доступа 777.
Но при вызове через адресную строку ничего не происходит (я заранее подготовил файлы в нужной папке), ничего даже не выводится на экран, наверное я не так вызваю функцию и\или не правильно прописал каталог
$dir = $_SERVER['DOCUMENT_ROOT']."/servers/"; - это

__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь

удалить старые файлы
Добрый день. Мне нужно написать небольшой код, который бы автономно удалял старые файлы из.

Удалить все старые файлы из двух папок, оставив только самый новый файл
Имеются файлы вида хх000000.txt где хх - буквы 000000 - числа (порядковый номер) В папках.

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

Нужно удалить на фтп сервере устаревшие файлы.
Привет всем. Задача проста как дверь. Нужно удалить на фтп сервере устаревшие файлы. Есть.

Можно так сделать и удалять вместе с каталогом даже
Добавлено через 1 минуту
Так то опасная функция, удаляет даже вложенные каталоги Не, мне нужно удалять только те файлы которым от рождения больше трех часов. Ща попробую из двух кодов сделать один. мне нужно удалять только те файлы которым от рождения больше трех часов. Суда вставьте проверку на время создания файла и будет Вам счастье Если писать так, то пишеть на 9ой строке переменная opendir неопределена и там же фаталка типа имя функции должнобыть текстовым.
Суда вставьте проверку на время создания файла и будет Вам счастье

ничего не происходит

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

Решение

Все удаляет, проверил даже на хостере, как вариант, может прав не хватает, но скрипт на 100% рабочий.
Добавлено через 5 минут
aurisdies, Я тут подумал, скорей всего надо поработать над условием удаления, добавил "контроль" удаления, думаю копать надо отсюда, так сказать подгонять нужное значение условия удаления файлов.
не знаю почему, но заработало! Огромное спасибо мужик! <?php
header ("Content-Type:text/html; charset=UTF-8");
ini_set ('display_errors', 1);
error_reporting (E_ALL);
function full_del_dir ($directory)
$expire_time = 300;
$dir = opendir($directory);
while(($file = readdir($dir)))
if ( is_file ($directory."/".$file)) $time_sec = time();
$time_file = filemtime($directory."/".$file);
$time = $time_sec - $time_file;
if ($time > $expire_time) unlink ($directory."/".$file);
echo 'файл удален: '.$file.'<br>';
>
>
else if ( is_dir ($directory."/".$file) && ($file != ".") && ($file != "..")) full_del_dir ($directory."/".$file);
>
>
closedir ($dir);
>
full_del_dir ('my'); // Путь до каталога относительно пути где лежит скрипт
?>

Ребят, а как то можно прикрутить $_SERVER['DOCUMENT_ROOT'] в
full_del_dir ('my'); // Путь до каталога относительно пути где лежит скрипт

Что бы путь до папки сам вставлялся. скрипт классный, но вот в автоопределении пути затык.
Скрипт в этой же папке лежит, где и удалять файлы надо.

Ребят, а как то можно прикрутить $_SERVER['DOCUMENT_ROOT'] в
full_del_dir ('my'); // Путь до каталога относительно пути где лежит скрипт
Что бы путь до папки сам вставлялся. скрипт классный, но вот в автоопределении пути затык.
Скрипт в этой же папке лежит, где и удалять файлы надо. я думаю проще будет кастрироавть скрипт, тоесть убрать вообще определение папки, а в коде удаления добавить исключение, типа самого себя чтоб не удалял. Но стоит отметить, что я специально сделал так чтобы скрипт был на уровень выше, мне кажется что так гараздо правильнее.

Да у меня надо заглушки на сайтах удалять. Домены разные, все не пропишешь. Поэтому и надо автоопределение.

Добавлено через 8 часов 24 минуты
Подсказали как решить проблему.

Удалил одинарные кавычки вокруг $_SERVER['DOCUMENT_ROOT']
$expire_time = уменьшил время до 1 сек

Взял этот скрипт

вроде всё работает, но не понятно как, пишу $expire_time = 3000;, создаю файл, запускаю скрипт и он буквально сразу удаляется. что не так? Ведь 3000 сек - это 50 минут. что не так . Bookkc1, и что пишет скрипт после отработки?
если файл удален то что выводит тут?

Создал файл 1.txt с текстом ааа, и через секунду запустил скрипт, выдает это

Вот код (может не там изменяю, на всякий случай выложу)

Bookkc1, Не чего не могу понять, почему разница с временем создания файла такая большая int(12126) хотя слип в секунду отрабатывает нормально int(1496060077) int(1496060078)
Походу у вас может быть при создании файла учитываются пояса, а так код полностью рабочий.
Но явно нужно смотреть именно тот файл который создается, а точнее у файла смотреть $time_file = filemtime($file); Может по тому что я создаю файл на рабочем пк и переношу его на сервер ? Может по тому что я создаю файл на рабочем пк и переношу его на сервер ? Естественно по этому, скрип предназначен (если использовать его с условием) для удаления файлов созданных на сервере, без условия можно удалять любые файлы.

Почему не получается установить старые версии iTunes?
Мне нужна старая версия чтобы пользоваться appstore. У меня 4 iphone, и я не могу устанавливать.


Не получается задача на матрицы. В ответе выводит старые данные
Доброго времени суток. Такая задача: задать размер массива в ручную, элементы автоматически. строку.

Старые аудио файлы не открываются
На работе есть сервер для хранения данных и как то понадобились аудио записи за пару лет тому.

Я просто хочу убедиться, правильный код или нет. Спасибо.

Вам следует добавить проверку is_file() , поскольку PHP обычно перечисляет . и .. , а также подкаталоги, которые могут находиться в каталоге, который вы проверяем.

Кроме того, как следует из этого ответа, вам следует заменить предварительно рассчитанные секунды более выразительным обозначением.

В качестве альтернативы вы также можете использовать DirectoryIterator , , как показано в этом ответе . В этом простом случае это действительно не дает никаких преимуществ, но это был бы способ ООП.

@ maksim-t ответ можно немного улучшить:

  1. Вычисляйте самое старое «разрешенное» с самого начала, вместо того, чтобы рассчитывать его на каждой итерации.
  2. Используйте время модификации вместо времени создания, потому что в противном случае вы можете удалить файлы, которые были недавно обновлены.
  3. Используйте getPathname вместо getFilename, чтобы не было необходимости в конкатенации пути.

Если текущее время и время изменения файла находятся в пределах 172800 секунд друг от друга, то.

Что ж, если все еще есть путаница, вам просто нужно изменить оператор из первой строки кода.

Вот пример того, как это сделать рекурсивно.

Имейте в виду, что вы столкнетесь с проблемами, если у вас будет очень большое количество файлов в каталоге.

Если вы считаете, что это может повлиять на вас, рассмотрите возможность использования подхода более низкого уровня, такого как opendir .

Надеюсь, это вам поможет.

Мне кажется, это правильно. Я просто предлагаю вам заменить 172800 на 2*24*60*60 для ясности.

Я считаю, что это намного аккуратнее, и его легче читать и изменять.

Другой более простой и современный способ - использование FilesystemIterator.

В качестве примера я использую каталог logs.

Главное преимущество: DirectoryIterator возвращает виртуальные каталоги "." и ".." в цикле. Но FilesystemIterator их игнорирует.

Иногда надо сделать удаление файлов старше n дней. Например Backup’ ы. Можно делать это вручную, отсортировать их по дате и удалить, а можно воспользоваться скриптом. В данном примере мы рассмотрим скрипт для удаления файлов старше n дней и добавим задание в планировщик Windows Server 2012R2.

Иногда надо сделать удаление файлов старше n дней. Например Backup’ ы. Можно делать это вручную, отсортировать их по дате и удалить, а можно воспользоваться скриптом. В данном примере мы рассмотрим скрипт для удаления файлов старше n дней и добавим задание в планировщик Windows Server 2012R2.

Содержание:

1. Скрипт удаления файлов старше n-дней

2. Создание задания в планировщике задач

Скрипт на самом деле очень простой, создается в PowerShell и выглядит он следующим образом:

Где:
F:\backup\ - путь, в какой папке мы будем с вами искать файлы для удаления *.* - имя (маска) файлов /d -30 - старше скольки дней нам необходимо удалить файлы.

Вот так это выглядит в PowerShell:

удаление


Осталось только его выполнить и все.


Все хорошо, у нас есть скрипт. Мы можем выполнять его вручную, когда необходимо очистить наши бекапы. Но зачем выполнять это вручную? Мы поручим планировщику запускать наш скрипт и избавимся сами от рутинной работы.

Итак, что нам для этого надо?

Для начала идем в "Пуск -> панель управления -> Администрирование" и запускаем там "Планировщик заданий".


Выбираем пункт "Создать задачу":


На вкладке "Общие" задаем имя задания, его описание и пользователя, от которого оно будет выполняться. По умолчанию там будет пользователь, под которым вы вошли в данный момент в систему.


Далее переходим на вкладку "Триггеры" и создаем расписание, когда мы будем запускать наше задания. У меня настроено в 10:00 каждые 2 дня.


Далее идем на вкладку "Действия" и задаем действие, которое будет выполняться. Выбираем "Запуск программы"

программу или сценарий

и указываем путь до PowerShell:

А аргументе указываем путь до нашего скрипта, который мы создали ранее:

Нажимаем "Ок" и еще раз "Ок"

Все, на этом наше задание создано. Осталось дождаться, когда будет выполнено наше действие по расписанию и проверить, все ли правильно было настроено.

Читайте также: