PHP Curl прямая загрузка / потоковое частичное содержимое

Я хочу отправлять / передавать файлы с другого веб-сайта / веб-адреса непосредственно пользователю без сохранения файлов на моем сервере. Файлы являются архивами от 100 МБ до 1 ГБ

Загрузка с одним потоком работает нормально. Вот мой код:

$ch5 = curl_init();
if (isset($_SERVER['HTTP_RANGE'])) {
//http://stackoverflow.com/questions/157318/resumable-downloads-when-using-php-to-send-the-file
preg_match('/bytes=(\d+)-(\d+)?/', $_SERVER['HTTP_RANGE'], $matches);
$offset = intval($matches[1]);
$end = $matches[2] || $matches[2] === '0' ? intval($matches[2]) : $size - 1;
curl_setopt($ch5, CURLOPT_RANGE, "$offset-$end");
}
curl_setopt($ch5, CURLOPT_URL, $direct_link);
curl_setopt($ch5, CURLOPT_TIMEOUT, 3550);
curl_setopt($ch5, CURLOPT_CONNECTTIMEOUT, 15);
curl_setopt($ch5, CURLOPT_HEADERFUNCTION, 'readHeader');
curl_exec($ch5);
$dlsize = curl_getinfo($ch5,CURLINFO_SIZE_DOWNLOAD );
$time = curl_getinfo($ch5,CURLINFO_TOTAL_TIME);
curl_close($ch5);

function readHeader($ch, $header) // Send header from the Downloaded file to the User
{
header($header);
return strlen($header);
}

Проблема в том, что PHP загружает полный файл, если запрос содержит Range, например «Range: bytes = 0-», и отправляет его пользователю. Но пользователь загружает намного медленнее (вызывает более медленную скорость загрузки), чем загружает его на мой сервер, но если файл полностью загружен, файл недоступен на внешнем сервере.
И когда Клиент делает запрос диапазона на вторую половину или что-то еще, запрос отправляется на внешний сервер и файл недоступен, потому что он уже полностью загружен первым запросом, но я не могу получить доступ к данным или есть способ получить эти данные, не сохраняя их на моем диске?

Я хочу сохранить пропускную способность, чтобы дать пользователям возможность делать Range Requests.
Поэтому PHP должен загружать только ту сумму, которую пользователь действительно хочет загрузить, или устанавливать прямое соединение между внешним Сервером и Пользователем.

На самом деле я использую nginx / 1.6.2 и PHP 5.5.20-1 на Ubuntu 12.04.5

0

Решение

Я решил свою проблему с помощью nginx с X-Sendfile / X-Accel-Redirect. Больше информации здесь: wiki.nginx.org/XSendfile

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]