socket и range - неработает

bevaine

Новичок
socket и range - неработает

PHP:
$fp = fsockopen("localhost", 80);
$out =  "GET $url HTTP/1.1\r\n";
$out .= "Range: bytes=5605-\r\n";
$out .= "Pragma: no-cache\r\n";
$out .= "Cache-Control: no-cache\r\n";
$out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out);
$fp2 = fopen("temp.html", "w");
while(!feof($fp)){
    $line = fgets($fp, 4000);
    echo ".";
    if (fwrite($fp2, $line) === FALSE) {
        echo "Не могу произвести запись в файл";
        exit;
    }
 }
fclose($fp);
fclose($fp2);
почему-то не работает:confused:
 

bevaine

Новичок
разобрался, дело в HTTP/1.1 надо 1.0, но вот принятый файл с докачкой почему-то покоцанный, хотя лишнего в скрипте ни чего не вывожу, что может повлиять на его увеличение?

Вообщем код такой:
PHP:
                if (@$fp = fopen($url, "rb")) {
                    $size = file_size($url);
                    header ('Accept-Ranges: bytes');
                    if (array_key_exists("HTTP_RANGE", $_SERVER)) {
                        $range = $_SERVER["HTTP_RANGE"];
                        list( ,$from) = explode("=", trim($range));
                        $s_start = substr($from, 0, -1);
                        $length = $size - $s_start;
                        $s_end = $size - 1;
                        fclose($fp);
                        $fp = fsockopen("localhost", 80);
                        $out =  "GET $url HTTP/1.0\r\n";
                        $out .= "Range: bytes=$s_start-\r\n";
                        $out .= "Pragma: no-cache\r\n";
                        $out .= "Cache-Control: no-cache\r\n";
                        $out .= "Connection: Close\r\n\r\n";
                        fwrite($fp, $out);
                        header ("Content-Length: ".$length);
                        header ("Content-Range: bytes ".$s_start."-".$s_end."/".$size);
                        //file_put_contents("temp.txt", headers_list());
                    } else {
                        header("Content-Length: ".$size);
                    }
                    header ('Connection: close');
                    header ('Content-Type: application/force-download');
                    set_time_limit(0);
                    ob_implicit_flush(true);
                    $koef = 10;
                    $maxkbps = 30;
                    $readlen = intval(1024 * $maxkbps / $koef);
                    $waittime = intval(1000000 / $koef);
                    while (!feof($fp)) {
                        if (connection_aborted()) {
                            break;
                        }
                        print (fread($fp, $readlen));
                        usleep($waittime);
                    }
                    fclose($fp);
                } else {
                    message();
                }
скрипт как бы скачивает файл с одного сервера и выдает пользвателю на 2 сервер, являясь как бы мостом между сервером и клиентом, с поддрежкой докачки. Без докачки все скачивается нормально, а при докачки файл получается покоцанный, хотя в "качалке", размер файла и размер принятого файла совпадают, в чем дело?
 
Сверху