Скачать удаленный файл с помощью curl напрямую - PullRequest
4 голосов
/ 10 февраля 2011

Я хочу скачать удаленный файл с помощью curl и немедленно вывести его пользователю.Пользователь должен думать, что он загружает файл с моего сервера, а не с удаленного сервера.Я не могу буферизовать целые файлы, потому что некоторые файлы имеют размер более 200 МБ.Также пользователю придется ждать окончания буферизации, пока он не сможет начать загрузку файла.

Я нашел скрипт для прямой загрузки файла с удаленного сервера:

<?php
$file_name = $_GET['file'];
$file_url = 'http://www.remote.tld/' . $file_name;
header('Content-Type: application/octet-stream');
header("Content-Transfer-Encoding: Binary"); 
header("Content-disposition: attachment; filename=\"".$file_name."\""); 
readfile($file_url);
exit;
?>

Является ли этот видпрямая дистанционная загрузка также возможна с помощью curl?

Ответы [ 2 ]

5 голосов
/ 10 февраля 2011

Вам необходимо прочитать и вывести файл кусками, поскольку весь файл размером 200 МБ, вероятно, не поместится в память вашего скрипта PHP.

См. этот вопрос , чтобы узнать, как это сделать.в завиткеВ руководстве есть живой пример.Украденный и измененный из этого, что-то вроде этого должно работать (не проверено):

<?php
curl_setopt($this->curl_handle, CURLOPT_WRITEFUNCTION, "receiveResponse");

function receiveResponse($curlHandle,$data)
   {
                        echo $data; // Ouput to the user
                        $length = strlen($data);
                        return $length;

                }
?>

Обратите внимание, что это редко хорошая идея.Это создает относительно большую нагрузку на сервер - если у вас достаточно высокое количество трафика, то стоит дорого заплатить за тщеславие того, кто обслуживает загрузку.Также, конечно, загрузка 200 МБ создаст 400 МБ на счете за трафик!

0 голосов
/ 10 февраля 2011

Вы не можете обслуживать файл со своего сервера, не буферизовав его на своем сервере.

Не существует технического решения, в том числе CURL, поскольку у вас нет доступа к DNS-серверу противоположного сервера, чтобы скрыть противоположный URL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...