Постараюсь описать задачу. Имеется 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); // удаляем основной файл
}
А чем вам, кстати, не нравится вариант, который используют почти все файлообменники? (Ссылка для скачивания будет доступна в течение суток и только для этого компьютера)
Комментариев нет:
Отправить комментарий