
PHPでファイルをダウロードさせたい事があったので、
その覚書です。
header関数を使う
ダウンロードさせるためにはheder関数を使います。
header('Content-Type:application/octet-stream'); //ダウンロードの指示
header('Content-Disposition:filename=download.txt'); //ダウンロードするファイル名
header('Content-Length:' . filesize('download.txt')); //ファイルサイズを指定
readfile("download.txt"); //ダウンロード
1行目
header('Content-Type:application/octet-stream');
これは、Webブラウザはそれをダウンロードするかどうかを支持します。
2行目
header('Content-Disposition:filename=downloat.txt');
ダウンロードするファイルに名前を付けます。
この記述がないと、この内容が書かれているPHPファイル名になってしまいます。
3行目
header('Content-Length:' . filesize('download.txt'));
ダウンロードしてる時のプログレスバーを表示するためです。
filesize関数の引数はファイルパスを指定します。

最近はこんなウインドウ見ない気がしますが・・・
4行目
readfile("download.txt");
実際にダウンロードします。
4行目のダウンロードの指示は
echo file_get_contents("download.txt");
でもいいようです。
違いは
| file_get_contents関数 | 変数に一旦保存する |
|---|---|
| readfile関数 | 読み込むと同時に標準出力する |
ファイルサイズが大きい場合、一旦変数に保存するfile_get_contentsは
memory_limitに引っかかってエラーになる可能性があります。
PHPExcel使ってた時にmemory_limitに引っかかってしまってたのは
これが原因かもしれません。
なのでいまはreadfile関数を使うようにしています。

