我可以使用PHP下载远程文件,但是如何从推出标题的链接下载?我的意思是,您可以单击某些链接,它将强制下载并向您显示保存文件的对话框。如何使用PHP 下载并保存这类东西?
任何教程的示例或链接都会很棒,因为我找不到有关此主题的任何内容。
感谢您的帮助
<?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);
?>
答案 0 :(得分:2)
试图重现情况。 Gubmo是对的,这个下载方法适用于 Content-Type:application / octet-stream 和 Content-type:application / force-download 标题。
正如here所述,HTTP 410意味着该系统不再提供客户端请求的 URL。这不是“从未听说过”的回应,而是“不再在这里生活”的回复。也许他们有某种反漏系统。
应该对此进行调查。如果他们需要cookie - 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);
与你的相同。
答案 1 :(得分:1)
您可以像下载远程文件一样进行操作。那些“强制下载”标题值只是告诉想要显示内联数据的用户代理,而不是下载它们。但它对您的脚本没有任何影响,因为它无法显示数据。