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;
}
}
Последнее редактирование: