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

0

Я хочу отправлять/передавать файлы с другого веб-сайта или веб-сайта непосредственно пользователю без сохранения файлов на моем сервере. Файлы - это архивы размером от 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: bytes = 0-", и отправляет его пользователю. Но загрузка пользователя намного медленнее (Cause slower download speed), а затем загружает его на мой сервер, но если файл полностью загружен, файл недоступен на внешнем сервере. И когда клиент делает запрос диапазона для второй половины или что-то еще, запрос переходит на внешний сервер, и файл недоступен, потому что он уже полностью загружен первым запросом, но я не могу получить доступ к данным или есть способ получить эти данные, не сохраняя их на моем диске?

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

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

  • 0
    PHP не то, что вы хотите использовать для этого. Изучите использование Squid squid-cache.org
  • 0
    Проблема заключается в том, что Пользователь не должен видеть исходный URL, и мне нужен PHP для хранения загруженного размера, потому что каждый пользователь имеет ограниченный контингент загрузки. Или есть возможность пользователя Squid в PHP
Показать ещё 2 комментария
Теги:
curl
nginx
downloading

1 ответ

0
Лучший ответ

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню