Загрузите файлы, защищенные htaccess, используя PHP и CURL - PullRequest
5 голосов
/ 09 февраля 2011

Я пытался скачивать файлы в защищенном каталоге htaccess, используя php и curl.Это мой код:

$username = "MyUsername";
$password = "MyPassword";
$url = "http://www.example.com/private/file.pdf";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
$output = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);

Но этот код ничего не делает ... как я могу начать загрузку файла file.pdf?

Спасибо!

Кроме того,если я выведу вывод $, я получу это:

Array ( [url] => http://www.example.com/private/file.pdf [content_type] => application/pdf [http_code] => 200 [header_size] => 264 [request_size] => 116 [filetime] => -1 [ssl_verify_result] => 0 [redirect_count] => 0 [total_time] => 0.007898 [namelookup_time] => 0.006777 [connect_time] => 0.006858 [pretransfer_time] => 0.006922 [size_upload] => 0 [size_download] => 27369 [speed_download] => 3465307 [speed_upload] => 0 [download_content_length] => 27369 [upload_content_length] => 0 [starttransfer_time] => 0.007839 [redirect_time] => 0 )

Ответы [ 4 ]

5 голосов
/ 03 мая 2011

вот рабочий код, вы допустили ошибку в строке: curl_setopt($curl, CURLOPT_BINARYTRANSFER, 1);

$username = "MyUsername";
$password = "MyPassword";
$url = "http://www.example.com/private/file.pdf";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
$output = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=file.pdf");
echo ($output);
2 голосов
/ 09 февраля 2011

Существует опция CURLOPT_BINARYTRANSFER, которая кажется отсутствующей.Вывод, который вы вставили, $info не $output кстати.Показывает, что загрузка произошла, download_content_length - 27369.

1 голос
/ 09 февраля 2011

Если вы пытаетесь загрузить файл, вы должны использовать CURLOPT_FILE вместо RETURNTRANSFER = true. Это позволит записать загруженные данные в файл в вашей системе напрямую, без заполнения пространства памяти PHP. Помните, что PHP обычно работает с ограничением памяти, и вы можете легко превысить его, загрузив большой файл.

Использование RETURNTRANSFER полезно только в том случае, если вы собираетесь выполнять обработку передаваемых данных в памяти, например загружать HTML в систему DOM для анализа.

Попробуйте вместо этого:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, false);
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_FILE, "/name/of/file/to/write/to/on/your/machine");
$output = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
0 голосов
/ 10 февраля 2011
$username = "MyUsername";
$password = "MyPassword";
$url = "http://www.example.com/private/file.pdf";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_BINARYTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
$output = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=file.pdf");
echo ($output);

Этот код работает, только что попробовал с Excel, Word и PDF документа.

В исходном коде отсутствуют curl_setopt($curl, CURLOPT_BINARYTRANSFER, 1);, заголовки header("Content-Type: application/octet-stream"); header("Content-Disposition: attachment; filename=file.pdf"); и эхо echo ($output);.

Спасибо за ваши ответы, особенно chx за опцию CURLOPT_BINARYTRANSFER!

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