Файловый Архив

  • Неограниченное количество категорий и суб-категорий
  • Настройки прав доступа по группам
  • Настройки прав доступа по каждой категории
  • Предпросмотр медиа файлов: FLV, IFLV, F4A, F4V, MP4, MP3, MOV и других...
  • Мультизагрузка файлов - SWFUploader
  • Добавление файлов с сервера
Подробности и история обновлений продукта в этой теме
 
 
 
 

 
 
Здесь скоро опять что то будет...
 
 
 
 
 
 
Loading

Вернуться   форум vBSupport.org > Разное (Другое) > Всякое другое

Объявления
  • Изменения в правах
  • Каталог Фрилансеров
  • Добро пожаловать!
  • Premoderation
  • Новичкам!
  • For English speaking users
Ответ
 
Опции темы Опции просмотра
Старый 05.08.2006, 13:33   #1
Простоузер
Question Файл с удаленного сервера

У меня есть скрипт посредник, все файлы лежат на сервере у которого нет поддержки РНР и я с помощью сокетов получаю этот файл или его часть (в зависимости от того указан ли $_SERVER ["HTTP_RANGE"]).
Вот листинг скрипта:
PHP код:
<?php

function curl ($host$name$range) {
    
$request "GET /" $name " HTTP/1.1\r\n" .
               
"Host: " $host "\r\n" .
               
"Connection: close\r\n";
    if (
$range != "") {
        
$request .= "Range: " $range "\r\n";
    }
    
$request .= "\r\n";
    
$headers true;
    
$result = array (
        
"headers" => array (),
        
"content" => ""
    
);
    
$site fsockopen ($host80);
    
fwrite ($site$request);
    while (!
feof ($site)) {
        
$line rtrim (fgets ($site));
        if (!
$line) {
            
$headers false;
            continue;
        }
        if (
$headers) {
            if (
substr ($line04) == "HTTP") {
                
$result ["headers"]["Status"] = $line;
            } else {
                list (
$name$value) = explode (": "$line);
                
$result ["headers"][$name] = $value;
            }
        } else {
            
$result ["content"] .= $line;
        }
    }
    
fclose ($site);
    return (
$result);
}

if (isset (
$_SERVER ["HTTP_RANGE"])) {
    
$range $_SERVER ["HTTP_RANGE"];
} else {
    
$range "";
}
$result curl ("archive.ru""LocoRoco.bmp"$range);

header ($result ["headers"]["Status"]);
header ("Content-Type: application/x-octetstream");
header ("Content-Length: " $result ["headers"]["Content-Length"]);
header ("Content-Disposition: attachment; filename=\"LocoRoco.bmp\"");

if (isset (
$result ["headers"]["Content-Range"])) {
    
header ("Content-Range: " $result ["headers"]["Content-Range"]);
}

header ("Last-Modified: " $result ["headers"]["Last-Modified"]);
header ("ETag: \"" $result ["headers"]["ETag"] . "\"");
header ("Accept-Ranges: bytes");

echo 
$result ["content"];

?>
Функция curl получает файл с удаленного сервера или его часть, и записывает все заголовки а также само содержание файла в результат в виде ассоциативного массива.
Ну а потом я просто посылаю все нужные заголовки и печатаю результат, НО проблема в том, что этот скрипт некорректно скачивает некоторые файлы.
В чем проблема?
  Ответить с цитированием
Рекламка
Реклама на форуме

Файловый Архив

  • Неограниченное количество категорий и суб-категорий
  • Тонкие настройки прав доступа
  • Предпросмотр медиа файлов: FLV, IFLV, F4A, F4V, MP4, MP3, MOV и других...
  • Мультизагрузка файлов - SWFUploader
  • Добавление файлов с сервера
Подробности и история обновлений продукта в этой теме
Старый 05.08.2006, 13:41   #2
netwind
Гуру
 
Аватар для netwind
HTTP/1.1 говоришь..
Попробуй просто вбить HTTP 1.0.
Дело в том, что сервер может решить отдать тебе Transfer-Encoding: chunked
а это отдельная засада ее нужно разбирать используя, например, полноценный curl,
а не твою самодеятельность.
в 1.0 таких извращений не было и контент там всегда непрерывный поток байт.
  Ответить с цитированием
Старый 05.08.2006, 16:13   #3
Vitas
Простоузер
ОК, попробую.
Кстати, как с помощью cURL получить заголовок Content-Range?

Последний раз редактировалось Vitas; 05.08.2006 в 16:24..
  Ответить с цитированием
Старый 05.08.2006, 16:49   #4
netwind
Гуру
 
Аватар для netwind
не занимался...
  Ответить с цитированием
Ответ

Закладки

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.



 
 

Текущее время: 07:17 26.05.2012. Часовой пояс GMT +4.


Powered by vBulletin® Version 3.5.9
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd. Перевод: zCarot