С нами с 17.07.05
Сообщения: 99
Рейтинг: 27
|
Добавлено: 05/09/05 в 22:31 |
Кто подскажет скрипт с поддержкой докачки файлов?
мы тут с товарищем вдвоём помучались, вот этот заставить работать не удалось, файл скачивается не полностью, докачка во флешгет не работает. Где ошибка?!
Код: |
$fn = $_GET['name'];
$fname = "/".$fn;
$fhost="files.mysite.com";
$filename = "http://files.mysite.com/".$fn;
//========== получаем размер и время для файла===========
$x=0;
$fp = fsockopen($fhost, 80, $errno, $errstr, 30) or die("облом");
fputs($fp, "HEAD $fname HTTP/1.0\nHOST: $fhost\n\n");
$x = 0;
while(!feof($fp))
{
$x.=fgets($fp, 1024);
}
fclose($fp);
preg_match_all("/Content-Length: *[0-9]+/i", $x, $mathes);
$temp = explode(':', $mathes[0][0]);
$FILESIZE = trim($temp[1]);
$fsize = $FILESIZE;
preg_match_all("/Last-Modified: *([^<]*)GMT/i", $x, $tmpdate);
$temp = explode('Last-Modified:', $tmpdate[0][0]);
$ftime = $temp[1];
//=============получили размер файла $fsize и время $ftime============
$fd = @fopen($filename, "rb");
if (!$fd){
header ("HTTP/1.0 403 Forbidden");
echo "403";
exit;
}
// Если запрашивающий агент поддерживает докачку
if ($HTTP_SERVER_VARS["HTTP_RANGE"]) {
$range = $HTTP_SERVER_VARS["HTTP_RANGE"];
$range = str_replace("bytes=", "", $range);
$range = str_replace("-", "", $range);
if ($range) {fseek($fd, $range);}
}
$content = fread($fd, $fsize);
fclose($fd);
if ($range) {
header("HTTP/1.1 206 Partial Content");
}
else {
header("HTTP/1.1 200 OK");
}
header("Content-Disposition: attachment; filename=$fn");
header("Last-Modified: $ftime");
header("Accept-Ranges: bytes");
header("Content-Length: ".($fsize-$range));
header("Content-Range: bytes $range-".($fsize -1)."/".$fsize);
header("Content-type: application/octet-stream");
print $content;
exit;
|
|
|
Нестандартный програминг на ПХП тел. 238 145 528
|
0
|
|
|
С нами с 26.02.03
Сообщения: 2366
Рейтинг: 987
|
Добавлено: 06/09/05 в 00:30 |
|
|
|
|
С нами с 17.07.05
Сообщения: 99
Рейтинг: 27
|
Добавлено: 06/09/05 в 00:40 |
не открывается
|
|
Нестандартный програминг на ПХП тел. 238 145 528
|
0
|
|
|
С нами с 26.02.03
Сообщения: 788
Рейтинг: 299
|
Добавлено: 06/09/05 в 01:29 |
Для реализации этого скрипта на Вашей страничке поместите следующую ссылку:
Код: | <A HREF="http://my.server.ru/download.php?name=need_file.rar" target="_top">need_file.rar</A> |
для закачиваемого файла. В приведенном примере файлы находятся в подкаталоге download, а через запрос передается только имя файла.
Код: | <?php
$fn = $HTTP_GET_VARS['name'];
$filename = './download/' . $fn;
if(strstr($fn, '/'))
{
// небольшая защита от попыток закачки из других каталогов
header($HTTP_SERVER_VARS["SERVER_PROTOCOL"] . " 403 Forbidden");
exit;
}
if(!file_exists($filename))
{
header($HTTP_SERVER_VARS["SERVER_PROTOCOL"] . " 404 Not Found");
exit;
}
$fsize = filesize($filename);
$ftime = date("D, d M Y H:i:s T", filemtime($filename));
$fd = @fopen($filename, "rb");
if(!$fd)
{
header($HTTP_SERVER_VARS["SERVER_PROTOCOL"] . " 403 Forbidden");
exit;
}
// Если запрашивающий агент поддерживает докачку
if($HTTP_SERVER_VARS["HTTP_RANGE"])
{
$range = $HTTP_SERVER_VARS["HTTP_RANGE"];
$range = str_replace("bytes=", "", $range);
$range = str_replace("-", "", $range);
if($range)
fseek($fd, $range);
}
$content = fread($fd, $fsize);
fclose($fd);
if($range)
header($HTTP_SERVER_VARS["SERVER_PROTOCOL"] . " 206 Partial Content");
else
header($HTTP_SERVER_VARS["SERVER_PROTOCOL"] . " 200 OK");
header("Content-Disposition: attachment; filename=$fn");
header("Last-Modified: $ftime");
header("Accept-Ranges: bytes");
header("Content-Length: " . ($fsize-$range) );
header("Content-Range: bytes $range-".($fsize -1). "/" . $fsize);
header("Content-Type: application/octet-stream");
print $content;
exit;
?> |
При необходимости можно вести протокол закачек.
Обратите внимание!
При открытии файлов функцией fopen более корректным является использование ключа "rb".
===
Взято отсюда
|
|
|
|
С нами с 17.07.05
Сообщения: 99
Рейтинг: 27
|
Добавлено: 06/09/05 в 08:09 |
в скрипте используется скачка с другого сервера и объём файлов оч большой, по этому file_exists и filesize ругаются, при замене на другие ф-ции, как показано в моём примере, скрипт перестаёт почему-то работать...
|
|
Нестандартный програминг на ПХП тел. 238 145 528
|
0
|
|
|
С нами с 17.07.05
Сообщения: 99
Рейтинг: 27
|
Добавлено: 06/09/05 в 09:52 |
проблема вытаскивания файла решена
|
|
Нестандартный програминг на ПХП тел. 238 145 528
|
0
|
|
|
Текстовая реклама в форме ответа Заголовок и до четырех строчек текста Длина текста до 350 символов Купить рекламу в этом месте! |