swipeshot
@swipeshot
Учусь на ошибках.

Удаление файлов через определенное время?

Здравствуйте. Есть хостинг изображений (приведем в пример), и надо, чтобы через определенное время (ну, 5 дней) файлы в папке удалялись.
Ну можно и другой вариант, если в папке более 100мб (например), то файлы опять удалялись.
Можно как-то это сделать? В моих интересах через .htaccess, но я приму любые другие варианты.
  • Вопрос задан
  • 7065 просмотров
Пригласить эксперта
Ответы на вопрос 4
Какая нафиг база? Какой PHP? Зачем это всё здесь? Денормализовать данные файловой системы, сделать решение не поддерживаемыми, хромым на обе ноги и склонным к глюкам?

find /путь/к/каталого/с/файлами -mtime +5 -delete

А вообще man finde конечно.
Ответ написан
Комментировать
nazarpc
@nazarpc
Open Source enthusiast
Можно, пишите в БД путь к файлу и дату загрузки, по крону удаляете старые. Какой .htaccess???
Ответ написан
@link_irk
Cron - это планировщик задач в *nix системах. То есть при помощи него задачи можно исполнять с определёнными интервалами или в определённое время. PHP скрипт можно исполнить передав его адрес напрямую в интерпретатор (не используя веб-сервер).
Создаёте таблицу в БД, куда будете вносить данные о загружаемых файлах: имя, дату загрузки, размер... Пишете PHP скрипт, который будет выбирать записи из БД, соответствующие определённым условиям (загруженные более 5 дней назад; последние записи, суммарный размер которых составляет 100 мб.). Затем в цикле удаляете эти файлы функцией unlink.
Теперь осталось создать задачу для крона. Например, будем каждый день в полночь проводить чистку. В панели управления сервером выбираете нужный интервал. В качестве команды укажите путь к интерпретатору с параметром - путь к скрипту, который будет чистить. Например: /usr/bin/php /home/user/www/cleaner_cron.php
Путь к интерпретатору ищите в FAQ'е хостинга или же спросите в службе поддержки
Ответ написан
Комментировать
sergiks
@sergiks Куратор тега PHP
♬♬
Можно и без крона: при сохранении очередного файла запускать заодно чистку. Причём чистка не обязательно должна быть полной: достаточно стереть несколько подлежащих удалению старых файлов. Ведь этот процесс запускается при каждом сохранении нового файла.

Для ускорения чистки можно при сохранении именовать новый файлы таким образом, чтобы они были отстортированы по времени создания, например, в подпапки по дням, и по времени:
date('Ymd/His-') . substr( md5_file( $tmp_filename), 0, 4)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы