スポンサードリンク

PHP
PHP

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でファイルをDLさせる際のPHPコード例

[PHP]file_get_contentsとreadfile

スポンサードリンク