Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Контролируемое скачивание 
:(
    Опции темы
Black Rabbit
  Дата 11.1.2007, 02:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 21.10.2004

Репутация: нет
Всего: 2



Всем привет! 
Подскажите пожалуйста, насколько возможно реализовать такую задачу:

Имеется сайт на котором можно  приобрести электронные журналы
Человек выбирает интересующие файлы и добавляет в корзину.
После оплаты все файлы загоняются в зип архив и отдаются на скачивание
Требуется  докачка и поддержка менеджеров закачек
Должна быть проверка, докачался ли файл до конца - если да, то запрещать повторное скачивание

  
На данный момент вижу только 2 способа реализации - отдача файла по фтп через скрипт, тогда можно реализовать докачку и проконтролировать конец скачивания, но многопоточность и архивирование отпадают

Либо реализовывать через символические линки   -   но как в таком случае узнать, был ли файл докачан 
до конца?

Что же касается предварительного архивирования, по-моему эта задача нерешаема....  не плодить же на сервере многочисленные временные архивы .....

Буду благодарна любым советам  smile 
  

Это сообщение отредактировал(а) Black Rabbit - 11.1.2007, 02:02
PM MAIL ICQ   Вверх
PARROT
Дата 11.1.2007, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2339
Регистрация: 5.1.2005
Где: Спб-ЦарьГрад

Репутация: 1
Всего: 50



Black Rabbit, посмотри тут: http://evgeny.neverov.name/articles/pretty-good-download/


--------------------
Безумный утешается прошедшим, слабоумный - будущим, умный - настоящим!
PM MAIL   Вверх
Black Rabbit
Дата 11.1.2007, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 21.10.2004

Репутация: нет
Всего: 2



Это и есть то, о чем я говорю- способ №1. Только я по фтп передаю файл
Код

if(isset($_SERVER["HTTP_RANGE"]))  {
 header ("HTTP/1.1 206 Partial Content");
  .........
 
}
else{
  header ("HTTP/1.1 200 OK"); 
  .......
}

$out = fopen("php://output", "w"); 
if(ftp_fget($ftp, $out, $download[1], FTP_BINARY,$range)) {

  # файл докачался полностью, пишем в логи, удаляем из корзины
}
 


Но при таком подходе возникает проблема с менеджерами закачек - приходится ограничивать  скачивание одним потоком,
иначе файл приходит битым
PM MAIL ICQ   Вверх
Mal Hack
Дата 11.1.2007, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 5
Всего: 261



Глянь еще вот это: http://pear.php.net/package/HTTP_Download
Думается мне, что тут бы файл через потоки stream открыть...
Интересно из-за чего бьется. В принципе или из-за FTP.
Не сталкивался с такой задачей, но она интересная.
PM ICQ   Вверх
Black Rabbit
Дата 11.1.2007, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 21.10.2004

Репутация: нет
Всего: 2



Кажется разобралась!
Надо было при коннекте к фтп отключить опцию  FTP_AUTOSEEK

Вот так работает многопоточно и с докачкой
Код

if(isset($_SERVER["HTTP_RANGE"])) 
  {

    preg_match ("/bytes=(\d+)-/", $_SERVER["HTTP_RANGE"], $offset); 
    $offsetSize=intval($offset[1]);
    $contentSize = $fileSize - $offsetSize; 
      
   header ("HTTP/1.1 206 Partial Content"); 
   header ("Content-Range: bytes " . $offsetSize. "-" .($fileSize-1). "/" .$fileSize); 

  } 
  else 
  {        
      $offsetSize= 0;
      $contentSize = $fileSize;    
      header ("HTTP/1.1 200 OK"); 
  } 
 ......
 header ("Content-Length: " . $contentSize);
 header ("Content-Disposition: attachment; filename=\"".$file_basename."\""); 
 header ("Content-Type: application/octet-stream"); 
 header ("Proxy-Connection: close"); 
 header ("");

$out = fopen("php://output", "w"); 

ftp_set_option($ftp, FTP_AUTOSEEK, false);   #!!!!!!!!

if(ftp_fget($ftp, $out, $file, FTP_BINARY,$offsetSize)){
  
    .....
  }


Только скачивается медленно идет по сравнению с прямым линком. 
Попробую переписать то же самое на Perl- е....  по идее прирост производительности будет раза в 2-3 больше 
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Сеть | Следующая тема »


 




[ Время генерации скрипта: 0.0707 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.