Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Докачка

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Без описания
Стас
Отправлено: 19 Мая, 2007 - 12:22:33
Post Id


Частый гость


Покинул форум
Сообщений всего: 147
Дата рег-ции: Май 2007  


Помог: 0 раз(а)

[+]


Я сделал скрипт, который "превращается" в файл - ему передаётся имя. Как сделал возможность докачки файла?
 
 Top
kamikadze
Отправлено: 19 Мая, 2007 - 15:09:08
Post Id



Склонен к самоубийству


Покинул форум
Сообщений всего: 391
Дата рег-ции: Янв. 2007  


Помог: 0 раз(а)




Во-первых, докачка файла осуществляется программой анализирующий файл получаемый и существующий уже и так докачуют файл! (поправте меня если не так)
Во-вторых, что означает "превращается" ?
 
 Top
Стас
Отправлено: 19 Мая, 2007 - 15:23:38
Post Id


Частый гость


Покинул форум
Сообщений всего: 147
Дата рег-ции: Май 2007  


Помог: 0 раз(а)

[+]


kamikadze пишет:
Во-первых, докачка файла осуществляется программой Во-вторых, что означает "превращается" ?

PHP:
скопировать код в буфер обмена
  1. header("Content-type: application/octet-stream");
  2. header("Content-Disposition: attachment; filename=$file");
  3. header("Accept-Ranges: bytes");
  4. $filesize =  filesize("$filename");
  5. header("Content-Length: $filesize");
  6. $fileb = readfile($filename);
  7. echo ($fileb);
 
 Top
kamikadze
Отправлено: 19 Мая, 2007 - 20:52:28
Post Id



Склонен к самоубийству


Покинул форум
Сообщений всего: 391
Дата рег-ции: Янв. 2007  


Помог: 0 раз(а)




НУ так бы и сказал что скриптом отсылаеш, или даёш запрос! А на счёт докачки я уже ответил!
 
 Top
Стас
Отправлено: 09 Июня, 2007 - 16:27:09
Post Id


Частый гость


Покинул форум
Сообщений всего: 147
Дата рег-ции: Май 2007  


Помог: 0 раз(а)

[+]


kamikadze пишет:
А на счёт докачки я уже ответил!

Нет. Поможет кто нибудь?

Да, докачку осуществляет программа, но соединение то можно разорвать! Если просто запросить файл, то сервер начнёт слать его с саамого начала, так как PHP-скрипт не поймёт заголовков, которые будет слать программа, чтобы файл ей отправили не с самого начала.

Что же мне делать???
 
 Top
kamikadze
Отправлено: 10 Июня, 2007 - 14:51:24
Post Id



Склонен к самоубийству


Покинул форум
Сообщений всего: 391
Дата рег-ции: Янв. 2007  


Помог: 0 раз(а)




Еще раз говорю, ты возьми и проведи експеремент, прежде чем говорить!
 
 Top
Стас
Отправлено: 10 Июня, 2007 - 15:00:54
Post Id


Частый гость


Покинул форум
Сообщений всего: 147
Дата рег-ции: Май 2007  


Помог: 0 раз(а)

[+]


Проверено на регете!
 
 Top
kamikadze
Отправлено: 11 Июня, 2007 - 11:14:32
Post Id



Склонен к самоубийству


Покинул форум
Сообщений всего: 391
Дата рег-ции: Янв. 2007  


Помог: 0 раз(а)




И? Вообще без скриптов без никаких, с ФТП и тд. докачка остуществляется отлично, и я не пойму в чём там у тебя проблема
 
 Top
Стас
Отправлено: 11 Июня, 2007 - 12:04:22
Post Id


Частый гость


Покинул форум
Сообщений всего: 147
Дата рег-ции: Май 2007  


Помог: 0 раз(а)

[+]


Но со скриптом нееет!!!!
 
 Top
valenok Модератор
Отправлено: 14 Июня, 2007 - 23:44:01
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




Программа отсылает скрипту заголовок с какого байта начинать докачку.
Определить это можно посредством проверки переменной $_SERVER["HTTP_RANGE"]
Она имеет вид Range: bytes=first-last

Дальше отдаём файл как обычно но с такими изменениями:

header("Accept-Ranges: bytes");
header("Content-Length: " . ($fsize-$range) );
header("Content-Range: bytes $range-".($fsize -1). "/" . $fsize);\n\n(Добавление)
нашёл готовый код:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.  
  4. $handle = fopen($fullname, 'rb');
  5. fseek($handle, 0, SEEK_END);
  6. $size = ftell($handle);
  7.  
  8. if(isset($_SERVER['HTTP_RANGE']))
  9. {
  10.     $range = explode('-', $_SERVER['HTTP_RANGE']);
  11.     if(!$range[0])$range[0] = 0;
  12.     if($range[1]) ++ $range[1];
  13.     else $range[1] = $size;
  14. }
  15. else $range = array(0, $size);
  16. if($range[0] < 0) $range[0] = 0;
  17. if($range[1] > $size) $range[1] = $size;
  18.  
  19. $part_size = $range[1]-$range[0];
  20. $range_start = $range[1];
  21.  
  22. if($range[0] > 0 || $range[1] < $size)
  23. {
  24.     $range_stop = $range[1]-1;
  25.     header("206 HTTP/1.0 Partial content");
  26.     header("Content-Length: $part_size");
  27.     header("Content-Range: bytes $range_start-$range_stop/$size");
  28. }else
  29.     header("Content-Length: $size");
  30. header("Accept-Ranges: bytes");
  31. header("Content-Type: application/octet-stream; name="$name"");
  32. header("Content-Disposition: attachment; filename="$name"");
  33.  
  34. fseek($handle, $range_start, SEEK_SET);
  35. if($arnge[1] == $size)
  36.     fpassthru($handle);
  37. else
  38.     for($blklen = 16384, $pos = $range_start; $pos < $range[1]; $pos += $buflen)
  39.     {
  40.         if($range[1]-$pos < $blklen)
  41.             $blklen = intval($range[1]-$pos);
  42.         $buffer = fread($handle, $blklen);
  43.         $buflen = strlen($buffer);
  44.         echo $buffer;
  45.     }
  46. ?>
  47.  


-----
Truly yours, Sasha.
 
My status
 Top
Стас
Отправлено: 15 Июня, 2007 - 12:07:43
Post Id


Частый гость


Покинул форум
Сообщений всего: 147
Дата рег-ции: Май 2007  


Помог: 0 раз(а)

[+]


Огромное спасибо!! не откажусь от объяснения)\n\n(Добавление)
У меня подглючивает - скачивает 0 байт... Имя файла распознаётся.
 
 Top
valenok Модератор
Отправлено: 15 Июня, 2007 - 14:06:32
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




Да, где то там чтото не прокатывает.
Исправлю, выложу в
Пользовательские функции
Форум, куда можно выкладывать свои и чужие готовые функции, желательно наличие описания.


-----
Truly yours, Sasha.
 
My status
 Top
Стас
Отправлено: 15 Июня, 2007 - 14:09:48
Post Id


Частый гость


Покинул форум
Сообщений всего: 147
Дата рег-ции: Май 2007  


Помог: 0 раз(а)

[+]


valenok
Буду ждать!
 
 Top
valenok Модератор
Отправлено: 16 Июня, 2007 - 12:52:15
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)






-----
Truly yours, Sasha.
 
My status
 Top
Стас
Отправлено: 16 Июня, 2007 - 15:02:29
Post Id


Частый гость


Покинул форум
Сообщений всего: 147
Дата рег-ции: Май 2007  


Помог: 0 раз(а)

[+]


Опробую... только вместо die('Файл не найден'); мне хочется поставить { header("HTTP/1.1 404 Not Found"); exit;
} Улыбка\n\n(Добавление)
"Размер файла изменился" - пишет Reget. попробую грушу HTTP-Download Улыбка\n\n(Добавление)
Он требует некие Header.php и PEAR.php где взять? или я не так делаю?
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB