Удаление файла после скачивания

  • Автор темы Автор темы WebByte
  • Дата начала Дата начала

WebByte

Проходящий мимо
Удаление файла после скачивания

Существует некий каталог, где каждый зарегистрированный пользователь может получать от администратора файлы. После скачивания юзером этих файлов их желательно удалять. Можно ли определить момент окончания закачки и грохнуть файл с сервера?
 
Нет
Тут два способа.
Первый. Выкладывай файлы на какое то время и сообщая пользователю что через это время файл будет удален. Дальше его проблемы.
Второй способ (извратный и не правильный). Отдавай файл скриптом :)
 
1. Не выход. Я могу и не знать через какое время пользователь зайдет и скачает.
2. Думал над ним, но скрипт же завершит работу после того как отдаст файл браузеру, а не после того как браузер его скачает. Разве нет?
 
Да
но когда он отдал файл пользователю файл уже не нужен, правда?
При первом способе тебя не должно волновать когда зайдет пользователь. Ты просто ему говоришь, что файл будет доступент 24 часа например. А дальше его проблемы. Успел знасит успел, не успел, пусть повторно файл заказывает :)
 
Всё-таки в описанной ситуации отдавать файл скриптом - способ совершенно правильный и не извратный. Просто отдавать надо корректно. И удалять файлы после выдачи тоже можно.

Я бы это проделал таким примерно макаром:

PHP:
if (file_exists($file)) {
	$filename = basename($file);
	$size = filesize($file);
	header("Content-Disposition: attachment; filename=$filename");
	header("Content-Length: $size");
	header("Charset: UTF-8");
	header("Content-Type: application/unknown");
	if (@readfile($file)) {
		unlink($file);
	}
}

Правда, если файл не существует, то это тоже надо бы, по-хорошему, обрабатывать.

Если ты не выводишь файл (т. е. ветка if не срабатывает), то ты можешь выводить HTML-код, как если бы пользователь запросил обычную страницу.
 
Lav
А ничего не случиться, если, к примеру, файлики по несколько мег и юзер на дохлом канале? ;)
 
Скрипты уже подсказали, как выход можно не удалять после скачивания, а включать счетчик по времени скажем на теже сутки - если за файлом никто не вернулся за это время считаем, что уже закачали его и удаляем, кто то стал докачивать - сброс счетчика.
Конечно некоторые юзеры с тормозными каналами могут и позже со своими флашгетами прийти - можно предупердить таких - чтоб не растягивали закачку слишком лдолго.
 
Найч
Если юзер на дохлом канале качает файлы по несколько мег - это его личные половые трудности. Программист тут ему ничем помочь не может, независимо от метода закачки. :-)

Gukovo
Будучи на месте пользователя, я бы предпочёл, чтобы мне не ставили ультиматумов.
 
Lav
Помочь может. И Gukovo решил проблему более-менее приемлемым способом. А вот позиция "Это проблема юзера, если он хочет закачать музыку, а коннект обрывается каждые пол-часа", по-моему, не верна. :-)
По поводу предупреждений.
Нормальная ситуация - человек днем собирает урлы, а на ночь ставит закачку либо сразу же тянет. И ни о каких лимитах времени и вспоминать не надо. Ограничить двумя днями и спать спокойно - это не будет никому мешать. И повторно заказывать файлы будут гораздо реже.
Пару раз юзер забудет вовремя скачать - прочитает условия, и впредь будет ориентироваться на время. Все же лучше, чем вечер биться на диалапе над одним файликом, а в итоге плюнуть на все это дело и уйти на лругой портал.
 
Можно установить достаточно большой лимит времени, в течение которого файл доступен (не удаляется), а на странице скачивания предлагать пользователю поставить какую-нить галочку - мол скачал я у уже этот файл. Файл удаляется, если юзер напрямую "сказал", что его уже можно удалять, или по истечении лимита времени
 
crocodile2u
А ты будешь после скачивания файла еще раз его искать, чтоб поставить там галочку? ;)

- Ты еще полдня за ним бегать будешь...
- Это зачем?
- А чтоб фотографию ему отдать...
 
Сверху