スポンサードリンク

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関数を使うようにしています。
(CakePHP2.x)Excel出力のためPHPExcelを設置してみる
[PHP]file_get_contentsとreadfile
スポンサードリンク