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

WebByte

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

Существует некий каталог, где каждый зарегистрированный пользователь может получать от администратора файлы. После скачивания юзером этих файлов их желательно удалять. Можно ли определить момент окончания закачки и грохнуть файл с сервера?
 

rsv

Новичок
Нет
Тут два способа.
Первый. Выкладывай файлы на какое то время и сообщая пользователю что через это время файл будет удален. Дальше его проблемы.
Второй способ (извратный и не правильный). Отдавай файл скриптом :)
 

WebByte

Проходящий мимо
1. Не выход. Я могу и не знать через какое время пользователь зайдет и скачает.
2. Думал над ним, но скрипт же завершит работу после того как отдаст файл браузеру, а не после того как браузер его скачает. Разве нет?
 

rsv

Новичок
Да
но когда он отдал файл пользователю файл уже не нужен, правда?
При первом способе тебя не должно волновать когда зайдет пользователь. Ты просто ему говоришь, что файл будет доступент 24 часа например. А дальше его проблемы. Успел знасит успел, не успел, пусть повторно файл заказывает :)
 

Lav

Guest
Всё-таки в описанной ситуации отдавать файл скриптом - способ совершенно правильный и не извратный. Просто отдавать надо корректно. И удалять файлы после выдачи тоже можно.

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

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

Guest
Скрипты уже подсказали, как выход можно не удалять после скачивания, а включать счетчик по времени скажем на теже сутки - если за файлом никто не вернулся за это время считаем, что уже закачали его и удаляем, кто то стал докачивать - сброс счетчика.
Конечно некоторые юзеры с тормозными каналами могут и позже со своими флашгетами прийти - можно предупердить таких - чтоб не растягивали закачку слишком лдолго.
 

Lav

Guest
Найч
Если юзер на дохлом канале качает файлы по несколько мег - это его личные половые трудности. Программист тут ему ничем помочь не может, независимо от метода закачки. :)

Gukovo
Будучи на месте пользователя, я бы предпочёл, чтобы мне не ставили ультиматумов.
 

Найч

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

crocodile2u

http://vbolshov.org.ru
Можно установить достаточно большой лимит времени, в течение которого файл доступен (не удаляется), а на странице скачивания предлагать пользователю поставить какую-нить галочку - мол скачал я у уже этот файл. Файл удаляется, если юзер напрямую "сказал", что его уже можно удалять, или по истечении лимита времени
 

Найч

Алгоритмик :-)
crocodile2u
А ты будешь после скачивания файла еще раз его искать, чтоб поставить там галочку? ;)

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