Q_BASIC
Хранитель порядка
- Регистрация
- 30 Ноя 2013
- Сообщения
- 516
- Реакции
- 1.240
- Автор темы
- #1
Приветствую,
Есть ссылка на файл, типа site1.ru/video.mp4
Есть ссылка для загрузки: site2.ru/upload.php
Файл весит несколько ГБ, поэтому полностью скачивать, а потом загружать нецелесообразно.
Надо считывать файл, например, 1 КБ, и сразу отправлять на скрипт загрузки. После опять считывать понемногу и отправлять.
Файл передается в поле video_file
Написал пока это, от загрузчика не получаю ответ. В $response пустая строка
Отметил в коде, где загвоздка
	
	
	
		
	
		
			
		
		
	
				
			Есть ссылка на файл, типа site1.ru/video.mp4
Есть ссылка для загрузки: site2.ru/upload.php
Файл весит несколько ГБ, поэтому полностью скачивать, а потом загружать нецелесообразно.
Надо считывать файл, например, 1 КБ, и сразу отправлять на скрипт загрузки. После опять считывать понемногу и отправлять.
Файл передается в поле video_file
Написал пока это, от загрузчика не получаю ответ. В $response пустая строка
Отметил в коде, где загвоздка
		PHP:
	
	function download_upload_video($from, $to)
{
    $from = parse_url($from);
    $fp = fsockopen('ssl://'.$from['host'], 443, $errno, $errstr, 30);
    if (!$fp) {
        echo "$errstr ($errno)<br />\n";
    } else {
        $out  = "GET {$from['path']}?{$from['query']} HTTP/1.1\r\n";
        $out .= "Host: {$from['host']}\r\n";
        $out .= "User-Agent: Uploader/1.0.0\r\n";
        $out .= "Connection: Close\r\n\r\n";
     
        // echo $out;
     
        fwrite( $fp, $out);
     
        $row = '';
        $is_headers = true;
        while ( !feof($fp)) {
         
            $line = fread( $fp, 128);
         
            if( $line === "") break;
         
            if( $is_headers)
            {
                $row .= $line;
             
                if( strpos($row, "\r\n\r\n"))
                {
                    $is_headers = false;
                 
                    if( !preg_match("#Content-Length:([\s0-9]*)#i", $row, $matches))
                    {
                        die('#1;'.$row);
                    }
                 
                    $to = parse_url($to);
                    $header  = "POST {$to['path']}?{$to['query']} HTTP/1.1\r\n";
                    $header .= "Host: ". $to['host'] ."\r\n";
                    $header .= "User-Agent: Uploader/1.0.0\r\n";
                    $header .= "Content-Type: multipart/form-data; boundary=1d24d998140483c22f78b0ef1bd425f4\r\n";
                    $header .= "Content-Length: ".(186+trim($matches[1]))."\r\n";
                    $header .= "Connection: keep-alive\r\n";
                    $header .= "Keep-Alive: 300\r\n\r\n";
                    $body  = "--1d24d998140483c22f78b0ef1bd425f4\r\n";
                    $body .= "Content-Disposition: form-data; ";
                    $body .= "name=\"video_file\"; filename=\"file\"\r\n";
                    $body .= "Content-Type: application/octet-stream\r\n\r\n";
                    $f = fsockopen('ssl://'.$to['host'], 443, $errno, $errstr, 30);
                 
                    // echo $header.$body;
                 
                    fputs($f, $header.$body);
                 
                    $parts = explode("\r\n\r\n", $row);
                 
                    if( isset($parts[1]))
                    {
                        // echo $parts[1];
                        fputs( $f, $parts[1]);
                    }
                }
            }
            else
            {
                fputs( $f, $line);
            }
        }
        fclose($fp);
     
        $body = "\r\n--1d24d998140483c22f78b0ef1bd425f4\r\n\r\n";
        // echo $body;
        fputs($f, $body);
        $response="";
        while( !feof( $f)) {
            $line=fgets($f,1000);
         
            if( $line=="") { break; }
            $response.=$line;
        }
        fclose($f);
        return $response;
    }
}
			
				Последнее редактирование: 
			
		
	
								
								
									
	
		
			
		
		
	
	
	
		
			
		
		
	
								
							
							 
				 
 
		 
 
		 
 
		