Страницы

Поиск по вопросам

вторник, 2 октября 2018 г.

Алгоритм удаления временных файлов

Постараюсь описать задачу. Имеется 1 скрипт, который генерирует файлы в папку tmp/. После этого сразу же второй скрипт начинает отдавать файл клиенту (стартует загрузку на клиент) с поддержкой докачки (http_range), поэтому неизвестно, когда файл скачается.
После чего файл больше не нужен. Как организовать удаление файлов и по какому критерию? Пока только придумал удаление всех файлов во временной директории, время жизни которых дольше N минут.
P.S.: Я уже пытался выяснить, как определить, что файл скачался в этом вопросе


Ответ

Возможно, вариант отмороженный, но если через 10 мин можно открыть файл с помощью fopen($file, 'a'); - значит, его не качают в данный момент.
Как вариант - сделать хэндлер для загрузки, в котором разбирать Accept-Range, и делать примерно так
fseek($f, $acceptRangeStart); $flock = @fopen('__' . basename($fileToDownload) . $acceptRangeStart, 'w+'); @fclose($flock); // создаем лок-файл echo fread($f, $acceptRangeBytes); @unlink('__' . basename($fileToDownload) . $acceptRangeStart); $finished = true; foreach (scandir('tmp') as $fn) { if (strpos($fn, '__' . basename($fileToDownload)) !== false) { $finished = false; // если идет докачка, сбрасываем break; } } if ($finished) { // если лок-файлов не найдено unlink($fileToDownload); // удаляем основной файл }
А чем вам, кстати, не нравится вариант, который используют почти все файлообменники? (Ссылка для скачивания будет доступна в течение суток и только для этого компьютера)

Комментариев нет:

Отправить комментарий