Обслуживание загрузки с помощью PHP и cURL

Я пишу сценарий, который загружает пользователей, используя мою премиальную учетную запись Megaupload. Это метод, который я использую для загрузки файлов Megaupload:

public function download_file($link) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $link); curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__) . "/cookies/megaupload.txt"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); return curl_exec($ch); curl_close($ch); } 

И вот как это называется в index.php:

 readfile($megaupload->download_file("http://www.megaupload.com/?d=PXNDZQHM")); 

То, что я в основном хочу, чтобы это сделать, – это загрузить пользователя и передать его через мой сервер. Я не хочу, чтобы файл сохранялся на моем сервере, а затем предлагался пользователю.

Но, очевидно, решение выше не будет работать. Я получаю эту ошибку:

 Warning: readfile() [function.readfile]: Filename cannot be empty in C:\xampp\htdocs\index.php on line 8 

Мне нужно использовать cURL для этого, потому что мне нужно запросить загрузку с помощью файла cookie (/cookies/megaupload.txt).

Может ли кто-нибудь подумать о том, как это сделать? Приветствия.

Solutions Collecting From Web of "Обслуживание загрузки с помощью PHP и cURL"

Да, точно так же, как сказано, readfile ожидает имя файла, и вы даете ему строку результата завитка. Просто используйте эхо после установки правильных заголовков :

 echo $megaupload->download_file("http://www.megaupload.com/?d=PXNDZQHM"); 

EDIT : Также вам нужно сделать некоторые базовые проверки, которые у вас есть:

 public function download_file($link) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $link); curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__) . "/cookies/megaupload.txt"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $result = curl_exec($ch); // close before you return curl_close($ch); return $result; } 

Затем:

 $filecontents = $megaupload->download_file("http://www.megaupload.com/?d=PXNDZQHM"); if($filecontents) { echo $filecontents; } else { die("Yikes, nothing here!"); } 

Использование метода, который вы пытаетесь использовать, не будет работать (или не будет работать так, как вы думаете).

Curl будет блокироваться, пока файл не будет полностью загружен.

Вы должны создать свой собственный протокол и обработать событие записи внутри класса.

Вот ссылка на предыдущее обсуждение, где кто-то очень хорошо объяснил это. В основном вам нужно обработать файл в управляемых кусках и передать их в браузер клиента: Манипулировать строку длиной 30 миллионов символов

Вы также можете попробовать использовать сокеты, но вам придется работать над вашим файлом cookie, потому что curl обрабатывает много всего за кулисами для вас.

Алгоритм для этого

  1. получить прямой URL-адрес нужного файла
  2. скажите, что ваш скрипт ждет 45 секунд (не член) или 25 секунд (участник)
    • если в случае, если пользователь является участником, пользователь должен сначала войти
  3. скачать файл