Загрузите защищенные файлы htaccess с помощью PHP и CURL

Я пытался загружать файлы в защищенный каталог 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?

Спасибо!

Кроме того, если я получаю echo $ output, я получаю следующее:

 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 ) 

    Существует опция CURLOPT_BINARYTRANSFER которая отсутствует. Вы вывешенным выводом – это $info not $output btw. Он показывает, что загрузка произошла, download_content_length – 27369.

    вот рабочий код, вы сделали ошибку на линии с: 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); 

    Если вы пытаетесь загрузить файл, вы должны использовать 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); 
     $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"); header("Content-Type: application/octet-stream"); header("Content-Disposition: attachment; filename=file.pdf"); и эхо- echo ($output); ,

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