Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Файл с удаленного сервера
 
 автор: vitas   (05.08.2006 в 13:20)   письмо автору
 
 

У меня есть скрипт посредник, все файлы лежат на сервере у которого нет поддержки РНР и я с помощью сокетов получаю этот файл или его часть (в зависимости от того указан ли $_SERVER ["HTTP_RANGE"]).
Вот листинг скрипта:
<?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 получает файл с удаленного сервера или его часть, и записывает все заголовки а также само содержание файла в результат в виде ассоциативного массива.
Ну а потом я просто посылаю все нужные заголовки и печатаю результат, НО проблема в том, что этот скрипт некорректно скачивает некоторые файлы.
В чем проблема?

   
 
 автор: cheops   (05.08.2006 в 23:40)   письмо автору
 
   для: vitas   (05.08.2006 в 13:20)
 

А некоторые, это какие? Чем они отличаются от других файлов?

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования