1

重複の可能性:
PHP を使用して強制的にファイルをダウンロードする

ユーザーにファイルのダウンロードを強制する必要がある場合は、いくつかのパラメーター/オプションを含むヘッダーを使用します。私が使用するとどうなりますか

header("location:test.xlsx");

これは機能しています:)このショートカットを使用することの欠点はありますか?

4

4 に答える 4

1

この方法にはいくつかの欠点があります。

  1. ファイルがブラウザで読み取れるファイルの場合、ダウンロードされず(、、、、、など)、.txtブラウザ.pdf.htmlに表示されるだけです。.jpg.png.gif

  2. ユーザーはファイルへの直接リンクを取得します。彼らは他の人にこのリンクを与えることができるので、かなり頻繁に、あなたはこれを望まないので...

    1. それはあなたにより多くの帯域幅を要します
    2. プライベートファイルには使用できません
    3. それが画像の場合、彼らはそれにホットリンクすることができます
于 2012-06-07T14:43:49.957 に答える
1

このアプローチは、ここで言及されている問題を解決するはずです

download.php?filename=test.xlsx

if isset ($_GET['filename']){
$filename = $_GET['filename']
}
else{
die();
}

header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);

そしてもちろん、ユーザーが他のファイルをダウンロードできないように、これを保護することを忘れないでください

于 2012-06-07T14:54:32.430 に答える
0

あなたがしているのは、ファイルにリダイレクトすることだけです。これは直接行った場合と変わりません。

ダウンロードを強制しようとしている場合は、Content-Dispositionヘッダーを適切に設定する必要があります。

header('Content-Disposition: attachment');

リダイレクト時にこのヘッダーを使用できないことに注意してください...このヘッダーはファイルの内容とともに送信する必要があります。参照: https://stackoverflow.com/a/3719029/362536

于 2012-06-07T14:40:38.260 に答える
0

すべてのファイルが強制的にダウンロードされるわけではありません。

.jpg でその header() を使用した場合、ブラウザーはダウンロード ダイアログを開かず、画像を表示するだけです。

于 2012-06-07T14:40:50.477 に答える