サイト上の画像や動画、PDFファイルなどにブラウザがアクセスしたとき、それらをブラウザ画面に表示させる代わりにファイルへ保存させたいことがある。
そのためには、ファイルに保存するかどうかはブラウザの振る舞いなので、ブラウザがそのように振舞ってくれるように配慮してサーバーからデータを送出する必要がある。
具体的にはHttpの “Content-Disposition” レスポンスヘッダに “attachment” を指定すればよい (ちなみに “inline” を指定すると、ファイル保存されずにブラウザ画面に表示されるらしい)。”filename” でファイル名を指定すると、それがブラウザがファイル保存時のデフォルトファイル名になる。
サンプルコード
“Content-Length” は指定しなくてもほとんどのブラウザで問題なさそうだけど、指定しておくとダウンロード中の進捗表示(パーセント表示)が適切に行われるようになるかも。
1 2 3 4 5 6 7 |
$file = "/var/www/html/test.csv"; header("Content-type: text/plain; charset=UTF-8"); header('Content-Length: '.filesize($file)); header('Content-Disposition: attachment; filename='.$file); readfile($file); |