<?
// опущена часть кода
// Подключаем сокет к серверу
// Берём заголовки и отключаемся
// $info - ассоциативный массив заголовков
// $headers - строка заголовков
// $tab - размер заголовков (в байтах)
//mysite.ru - здесь лежат архивы
$fp = fsockopen ("mysite.ru", 80, $errno, $errstr, 30);
if(!$fp){
echo "$errstr ($errno)<br>\n";
}else{
fputs ($fp, "GET /$name HTTP/1.0\r\nHost: mysite.ru\r\n\r\nContent-Type: application/rar\r\nConnection: Close");
$info = Array();
$headers = '';
$tab = 0;
for($i = 0; $i < 9; $i++){
$str = fgets ($fp,1024);
$tab += strlen($str);
$str = substr($str, 0, strlen($str) - 2);
$headers .= $str ."\n";
$tmp = explode(": ", $str);
$info[$tmp[0]] = $tmp[1];
}
fclose ($fp);
}
// Передаём пользователю заголовки
// Принимаем файл с сервера и отдаём его юзеру
$filename = "http://mysite.ru/".$name; //$name - имя архива
$fsize = $info['Content-Length'];
$ftime = date("D, d M Y H:i:s T", filemtime($filename));
$fd = @fopen($filename, "rb");
if (!$fd){
header ("HTTP/1.0 403 Forbidden");
exit;
}
// Если запрашивающий агент поддерживает докачку
if ($_SERVER["HTTP_RANGE"]) {
$range = $_SERVER["HTTP_RANGE"];
$range = str_replace("bytes=", "", $range);
$range = str_replace("-", "", $range);
if ($range) {fseek($fd, $range);}
}
if ($range) {
header("HTTP/1.1 206 Partial Content");
}
else {
header("HTTP/1.1 200 OK");
}
header("Content-Disposition: attachment; filename=$name");
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");
// отдаём файл
$buffer = '';
while (!feof($fd)) {
set_time_limit(0);
$buffer= fread($fd, 1024*8);
print $buffer;
flush();
}
fclose($fd);
// опущена часть кода
?>