Forum Webscript.Ru
		Программирование => PHP => Тема начата: scor от 20 Июля 2005, 16:27:30
		
			
			- 
				Подскажите знающие люди, plzz..
 
 Каким образом можно проконтролировать количество потоков скачивания файлов с сервера и сам процесс скачивания? Т.е., допусмтим, надо выдать браузеру 3 ссылки на скачивание файла, одновременно можно закачивать только 2 и как только процесс скачивания будет завершен сразу их убирать?
 
 Заранее спасибо..
- 
				scor 
 Заводишь у себя на сервере (в базе, в файле, whatever) запись типа
 random_id -> /dir/file.ext
 
 Человеку отдаешь ссылку типа
 your.script?file=random_id
 
 При обращении по этой ссылке уже производишь какие-то логические действия, и в конечном итоге отдаешь либо не отдаешь файл.
 
 Ищи по форуму, много раз разжевывался процесс.
- 
				scor 
 А вот
 scor:
 Ограничивание потоков скачивания
 
 это немножко не то. Там больше настройка сервера.
- 
				хмм... а если, например, делать через сессии, то можно всё это вместе удобно увязать... напрмер, вот так сделать:
 
 if (!isset($_SESSION[\'links\']))
 $_SESSION[\'links\']=array();
 if (!isset($_SESSION[\'downloaded\']))
 $_SESSION[\'downloaded\']=array();
 
 есть какой-то списко файлов
 $filesist=array(\'file.zip\',\'file1.zip\'); ...
 
 генерим для каждого уникальный хеш, каждый раз разный, при этом не даём файлов, которые в скачке
 foreach($filelist as $file)
 if (!in_array($file,$_SESSION[\'downloaded\']))
 $_SESSION[\'links\'][md5(microtime)]=$file;
 
 выдаём линки с актуальными хешами, файл прячем
 foreach($_SESSION[\'links\'] as $hash=>$real)
 echo \'file\';
 
 потом в каком-нить get.php перехватываем ту же сессию, и
 if (isset($_SESSION[\'links\'][$_SERVER[\'QUERY_STRING\']]))
 {
 пишем что качается
 $_SESSION[\'downloads\'][]=$_SESSION[\'links\'][$_SERVER[\'QUERY_STRING\']]);
 и убираем хеш
 unset($_SESSION[\'links\'][$_SERVER[\'QUERY_STRING\']]);
 тут же можно провирать count(downloaded) и всё такое
 }
 
 
 хотя ты это прочел уже, наверное..))
- 
				CGVictor:
 Человеку отдаешь ссылку типа your.script?file=random_id
 
 При обращении по этой ссылке уже производишь какие-то логические действия, и в конечном итоге отдаешь либо не отдаешь файл.
 
 вопрос в том, чтобы убрать эту ссылку сразу же, после того, как файл докачается..
- 
				scor 
 scor:
 сразу же, после того, как файл докачается
 
 Не докачается, прошу заметить, а начнет скачиваться. Определить, докачал ли пользователь файл, или посеял его где-то по пути, ты не сможешь.
 
 Принята практика использовать время истечения ссылки. Т.е. по ссылке script.php?file=id можно обращаться в течении, скажем, одного часа.
 
 Про сессии не разбирался, ибо лень.
- 
				CGVictor:
 Не докачается, прошу заметить, а начнет скачиваться. Определить, докачал ли пользователь файл, или посеял его где-то по пути, ты не сможешь.
 
 Хм.. а как тогда сделано на allofm3.ru ? Да. там ссылки на файлы хранятся условно 24 часа, НО,  если их скачать раньше, то сразу же(!) после того, как файл докачивается эта ссылка пропадает(!) из списка. Посмотри ради интереса..
- 
				scor 
 Понимаешь, не факт, что он докачивается. Он отдается пользователю. Хотя во многих случаях - это и требуется.