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-streamおよびContent-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 に答える