私は長い間SOを使ってきましたが、最終的には答えが見つからない質問がありました。私は自分のサイトを使用して、別のサーバーでホストされているファイルにユーザーをリダイレクトする必要があります。サーバで帯域幅を使用せずに外部ファイルをダウンロードするにはどうすればよいですか?
header("Location: $url")
はしかし、他のサーバにホストされているファイルは、ファイル名だけとしてUUIDを持っているので、私は適切なMIMEタイプとファイル名を渡すためにヘッダーを使用します(これは:最初に私は、「これは簡単なはず」と思いました私が知るだろう)。これは私が次のコードを使用して行うことができます。
<?php
$filename = $_REQUEST["name"];
$filesize = $_REQUEST["size"];
$mimetype = $_REQUEST["mime"];
$url = $_REQUEST["url"];
// used to test
$filename = "example.txt";
$filesize = "2966";
$mimetype = "text/plain";
$url = "http://example.com";
header('Content-Type: ' . $mimetype);
header("Content-length: " . ($filesize + 0));
header('Content-Disposition: attachment; filename="' . $filename . '"');
// this just redirects to the page, ignoring the Content- headers
//header('Location: ' . $url);
// this works, but I suspect that it uses my server's bandwidth
readfile($url);
exit();
?>
を私は上記の投稿した方法は、実際にダウンロードをユーザに提示んが、それは私自身のサーバーを介してダウンロードを通りませんか?私は潜在的にこれで多くのファイルをダウンロードしている可能性があり、私はむしろ自分の帯域幅を使用しないでください。私はこれが可能ではないかもしれないことを認識していますが、私はどんな洞察にも感謝します。
サーバーからヘッダーを設定する場合、コンテンツが同じ方法で配信されるため、帯域幅を使用する必要があります。 –
これはまさにあなたが疑っているとおりです。 'readfile()'コールはあなたの側で帯域幅を消費し、リダイレクトで外部リソースにHTTPリーダーを当てることは不可能です。これを行う外部サービスが見つからない限り(そして帯域幅を提供する)、ここでは回避策はありません。 – mario
* sigh *私は思ったほどです。みんなありがとう。 – MalcolmOcean