重複の可能性:
PHP を使用して強制的にファイルをダウンロードする
ユーザーにファイルのダウンロードを強制する必要がある場合は、いくつかのパラメーター/オプションを含むヘッダーを使用します。私が使用するとどうなりますか
header("location:test.xlsx");
これは機能しています:)このショートカットを使用することの欠点はありますか?
重複の可能性:
PHP を使用して強制的にファイルをダウンロードする
ユーザーにファイルのダウンロードを強制する必要がある場合は、いくつかのパラメーター/オプションを含むヘッダーを使用します。私が使用するとどうなりますか
header("location:test.xlsx");
これは機能しています:)このショートカットを使用することの欠点はありますか?
この方法にはいくつかの欠点があります。
ファイルがブラウザで読み取れるファイルの場合、ダウンロードされず(、、、、、など)、.txt
ブラウザ.pdf
内.html
に表示されるだけです。.jpg
.png
.gif
ユーザーはファイルへの直接リンクを取得します。彼らは他の人にこのリンクを与えることができるので、かなり頻繁に、あなたはこれを望まないので...
このアプローチは、ここで言及されている問題を解決するはずです
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);
そしてもちろん、ユーザーが他のファイルをダウンロードできないように、これを保護することを忘れないでください
あなたがしているのは、ファイルにリダイレクトすることだけです。これは直接行った場合と変わりません。
ダウンロードを強制しようとしている場合は、Content-Disposition
ヘッダーを適切に設定する必要があります。
header('Content-Disposition: attachment');
リダイレクト時にこのヘッダーを使用できないことに注意してください...このヘッダーはファイルの内容とともに送信する必要があります。参照: https://stackoverflow.com/a/3719029/362536
すべてのファイルが強制的にダウンロードされるわけではありません。
.jpg でその header() を使用した場合、ブラウザーはダウンロード ダイアログを開かず、画像を表示するだけです。