Forum Webscript.Ru

Программирование => PHP => Тема начата: scor от 20 Июля 2005, 16:27:30

Название: Ограничивание потоков скачивания и не только
Отправлено: scor от 20 Июля 2005, 16:27:30
Подскажите знающие люди, plzz..

Каким образом можно проконтролировать количество потоков скачивания файлов с сервера и сам процесс скачивания? Т.е., допусмтим, надо выдать браузеру 3 ссылки на скачивание файла, одновременно можно закачивать только 2 и как только процесс скачивания будет завершен сразу их убирать?

Заранее спасибо..
Название: Ограничивание потоков скачивания и не только
Отправлено: CGVictor от 20 Июля 2005, 17:13:21
scor
Заводишь у себя на сервере (в базе, в файле, whatever) запись типа
random_id -> /dir/file.ext

Человеку отдаешь ссылку типа
your.script?file=random_id

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

Ищи по форуму, много раз разжевывался процесс.
Название: Ограничивание потоков скачивания и не только
Отправлено: CGVictor от 20 Июля 2005, 17:14:09
scor
А вот
Цитировать
scor:
Ограничивание потоков скачивания

это немножко не то. Там больше настройка сервера.
Название: Ограничивание потоков скачивания и не только
Отправлено: scor от 20 Июля 2005, 17:16:39
хмм... а если, например, делать через сессии, то можно всё это вместе удобно увязать... напрмер, вот так сделать:

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) и всё такое
}


хотя ты это прочел уже, наверное..))
Название: Ограничивание потоков скачивания и не только
Отправлено: scor от 20 Июля 2005, 17:22:51
Цитировать
CGVictor:
Человеку отдаешь ссылку типа your.script?file=random_id

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

вопрос в том, чтобы убрать эту ссылку сразу же, после того, как файл докачается..
Название: Ограничивание потоков скачивания и не только
Отправлено: CGVictor от 21 Июля 2005, 17:05:30
scor
Цитировать
scor:
сразу же, после того, как файл докачается

Не докачается, прошу заметить, а начнет скачиваться. Определить, докачал ли пользователь файл, или посеял его где-то по пути, ты не сможешь.

Принята практика использовать время истечения ссылки. Т.е. по ссылке script.php?file=id можно обращаться в течении, скажем, одного часа.

Про сессии не разбирался, ибо лень.
Название: Ограничивание потоков скачивания и не только
Отправлено: scor от 21 Июля 2005, 17:31:53
Цитировать
CGVictor:
Не докачается, прошу заметить, а начнет скачиваться. Определить, докачал ли пользователь файл, или посеял его где-то по пути, ты не сможешь.

Хм.. а как тогда сделано на allofm3.ru ? Да. там ссылки на файлы хранятся условно 24 часа, НО,  если их скачать раньше, то сразу же(!) после того, как файл докачивается эта ссылка пропадает(!) из списка. Посмотри ради интереса..
Название: Ограничивание потоков скачивания и не только
Отправлено: CGVictor от 21 Июля 2005, 22:46:49
scor
Понимаешь, не факт, что он докачивается. Он отдается пользователю. Хотя во многих случаях - это и требуется.