|
|
|
| У меня есть скрипт посредник, все файлы лежат на сервере у которого нет поддержки РНР и я с помощью сокетов получаю этот файл или его часть (в зависимости от того указан ли $_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 ($host, 80);
fwrite ($site, $request);
while (!feof ($site)) {
$line = rtrim (fgets ($site));
if (!$line) {
$headers = false;
continue;
}
if ($headers) {
if (substr ($line, 0, 4) == "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 получает файл с удаленного сервера или его часть, и записывает все заголовки а также само содержание файла в результат в виде ассоциативного массива.
Ну а потом я просто посылаю все нужные заголовки и печатаю результат, НО проблема в том, что этот скрипт некорректно скачивает некоторые файлы.
В чем проблема? | |
|
|
|
|
|
|
|
для: vitas
(05.08.2006 в 13:20)
| | А некоторые, это какие? Чем они отличаются от других файлов? | |
|
|
|