Автоматическое удаление файлов

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
Joseph Jevelin
Сообщения: 339
Зарегистрирован: 2012.01.06, 22:07

Автоматическое удаление файлов

Сообщение Joseph Jevelin »

Использую редактор в связке с AJAX-загрузкой файлов. Думаю, как правильно реализовать удаление ненужных файлов (например, удалённых из HTML-кода при редактировании). Планирую создать специальную таблицу, при загрузке записывать туда путь файла и айдишник публикации, а после редактирования проверять наличие пути файла в коде. Но что можно придумать при создании? И как быть в тех случаях, когда пользователь закрыл окно, не сохранив изменения. Я так понимаю, с помощью PHP это не отследить?

UPD: Можно сканить таблицу с файлами при отображении публикации. Но это плохой вариант.
Nafania
Сообщения: 1227
Зарегистрирован: 2011.01.31, 13:12

Re: Автоматическое удаление файлов

Сообщение Nafania »

По крону удаляйте.
Joseph Jevelin
Сообщения: 339
Зарегистрирован: 2012.01.06, 22:07

Re: Автоматическое удаление файлов

Сообщение Joseph Jevelin »

Думал об этом, но не будет ли слишком большой нагрузки на сервер? Проходить всю таблицу и проверять наличие файлов в папке. Допустим, при тысяче записей.
Аватара пользователя
flashimage
Сообщения: 1517
Зарегистрирован: 2011.01.23, 12:43

Re: Автоматическое удаление файлов

Сообщение flashimage »

по крону в воскресенье в 5 утра ))
Бранчи это гомеоморфические эндофункторы, которые мапятся на субманифолды пространства Гилберта.
Аватара пользователя
ifelse
Сообщения: 227
Зарегистрирован: 2013.02.05, 13:05

Re: Автоматическое удаление файлов

Сообщение ifelse »

В чем заключается большая нагрузка? 1 запрос, цикл с file_exists и всё)
Joseph Jevelin
Сообщения: 339
Зарегистрирован: 2012.01.06, 22:07

Re: Автоматическое удаление файлов

Сообщение Joseph Jevelin »

ifelse писал(а):В чем заключается большая нагрузка? 1 запрос, цикл с file_exists и всё)
Записывать каждую загрузку в базу. И если файл не существует, то удалять публикацию? ;)
Мне нужно наоборот, если в публикациях нет упоминания о файлах, то оставлять все файлы, о которых такие упоминания есть, остальные - в корзину.
Аватара пользователя
vova07
Сообщения: 1004
Зарегистрирован: 2012.11.29, 14:52
Откуда: Chisinau, Moldova

Re: Автоматическое удаление файлов

Сообщение vova07 »

Если честно чуток не понимаю эту связь:
Joseph Jevelin писал(а):Планирую создать специальную таблицу, при загрузке записывать туда путь файла и айдишник публикации, а после редактирования проверять наличие пути файла в коде.
и
Joseph Jevelin писал(а):И если файл не существует, то удалять публикацию? ;)
Если вы планируете создавать для каждого файла отдельную запись в базе, то выше вам посоветовали оптимальный вариант.
Ваша логика же, как я понимаю, такая:
- При Создании\редактировании статьи вы проверяете наличие файлов в статье. Если они есть\нет то добавляете, или удаляете записи из таблицы. Таким образом в вспомогательной таблице у вас всегда актуальные данные.
- Теперь по крону выбираем все записи таблицы, и удаляем те файлы которых там нет.

Хотя можно и без вспомогательной таблицы, чтобы не тратить зря ресурсы при создании\редактировании статьи.
По крону запускаем скрипт который будет делать следующее:
- Выбирает все текстовые поля статей из БД.
- Парсит контент, и сохраняет в "temporary" таблицу все адреса внутренних файлов которые он нашел. (можно и без сохранения в таблице)
- Выбирает из временной таблице все файлы, и удаляет по проверке мусор.
Joseph Jevelin
Сообщения: 339
Зарегистрирован: 2012.01.06, 22:07

Re: Автоматическое удаление файлов

Сообщение Joseph Jevelin »

Вторая цитата моего сообщения - это, как я понял, логика работы с функцией, которую предложил ifelse. Мне так не нужно.

В общем, думаю, понял. Наилучший вариант - CronTab. Несмотря на то, что нагрузка на сервер в определённый момент возрастёт, так как проверятся будут не только публикации. А иной раз, выборка с тысячами записями будет бессмысленна, ибо лишних файлов на сервере не будет существовать. Поставлю запуск скрипта, действительно, в воскресенье в пять утра) Благодарю откликнувшихся)
Ответить