保存推送标头以强制下载的远程文件

时间:2009-02-13 18:03:41

标签: php http file download http-headers

我可以使用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);

?>

2 个答案:

答案 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)

您可以像下载远程文件一样进行操作。那些“强制下载”标题值只是告诉想要显示内联数据的用户代理,而不是下载它们。但它对您的脚本没有任何影响,因为它无法显示数据。