Сохранить удаленный файл, который подталкивает заголовки, чтобы принудительно загрузить

Я могу загружать удаленные файлы с помощью PHP, но как вы загружаетесь из ссылки, которая выталкивает заголовки? Я имею в виду, вы можете щелкнуть по некоторым ссылкам, и это заставит загрузить и предоставить вам диалоговое окно для сохранения файла. Как загрузить и сохранить такие вещи с помощью PHP?

Любые примеры или ссылки на учебные пособия были бы замечательными, так как я не мог найти ничего полезного в этой теме.

Спасибо за любую помощь

Обновлено и [SOLVED]

<?php set_time_limit(300); // File to download $remoteFile = $_GET['url']; $file = fopen($remoteFile, "r"); if (!$file) { echo "<p>Unable to open remote file.\n"; exit; } $line = ''; while (!feof ($file)) { $line .= fgets ($file, 4096); } //readfile($line); file_put_contents('here2.mp4', $line); fclose($file); ?> 

Просто попытался воспроизвести ситуацию. Gubmo прав, этот метод загрузки работает для меня с заголовками Content-Type: application / octet-stream и Content-type: application / force-download .

Как поясняется здесь , HTTP 410 означает, что URL-адрес, запрошенный клиентом, больше не доступен из этой системы. Это не ответ «никогда не слышал», но ответ «не живет здесь больше» . Может быть, у них есть какая-то антилевая система.

Это должно быть исследовано. Если им нужны куки-файлы, то может помочь stream-context-create . Или, может быть, они проверяют референта. Но я почти уверен, что проблема не в заголовках.

Надеюсь это поможет.

UPD Пример кода, о котором вы просили.

 // file to download -- application/octet-stream $remoteFile = 'http://dev/test/remote/send.php'; // file to download -- application/force-download $remoteFile = 'http://chtyvo.org.ua/authors/Skriabin_Kuzma/Ya_Pobieda_i_Berlin.rtf.zip'; // file to store $localFile = 'kuzma.zip'; $fin = fopen($remoteFile, "r"); if (!$fin) { die("Unable to open remote file"); } $fout = fopen($localFile, "w"); if (!$fout) { die("Unable to open local file"); } while (!feof($fin)) { $line = fgets($fin, 1024); fwrite($fout, $line, 1024); } fclose($fout); fclose($fin); 

То же, что и у вас.

Вы можете сделать это так же, как при загрузке удаленных файлов. Значения заголовков «force download» просто указывают пользовательским агентам, которые хотят отображать данные inline для их загрузки. Но это не имеет никакого значения для вашего скрипта, поскольку он не может отображать данные.