0

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

?>
4

2 回答 2

2

只是试图重现情况。Gubmo 是对的,这种下载方法适用于我的Content-Type: application/octet-streamContent-type: application/force-download标头。

如此处所述,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);

和你的一样。

于 2009-02-13T19:04:51.200 回答
1

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

于 2009-02-13T18:07:36.423 回答