header()→readfile()でファイルのダウンロード

ファイルのダウンロードを、PHPからブラウザへ直接吐き出したいとき、
header() でHTTP ヘッダ送信 → readfile() でファイル出力 の流れをとるようだ。

このとき、readfile() の引数にはファイルのパスを突っ込むだけだが、
header() に何をいれるかで、どうも各ブラウザ、特にIE系で、
ダウンロードが発動したりしなかったり画面真っ白になったりばらばら・・。。
そんなとき、、、


↓のサイトを見て解決。
IEの謎の動作とCSVダウンロード – マイサイト開発室

ようは、IEはヘッダー指定を無視してキャッシュつかったりするから、
キャッシュ無効のヘッダーを送ればOK、ってことかしら?
とりあえず以下で私の環境では IE・Sleipnir・Firefox完動☆

header(“Cache-Control: public”);
header(“Pragma: public”);
header(“Content-Type: application/octet-stream”);
header(“Content-Disposition: attachment; filename=\”ファイル名\””);

実際にはもうちょっと色つけて、以下みたいなコードを↓

$path_file = “ファイルパス”;
$file_size = filesize($path_file);
header(“Cache-Control: public”);
header(“Pragma: public”);
header(“Content-Type: application/octet-stream”);
header(“Content-Disposition: attachment; filename=\””.basename($path_file).”\””);
header(“Content-Length: “.$file_size);

IEのバージョンによっても、動作ばらばらっぽいなぁ・・怖い><;
ま、とりあえずw では!

磨者(MAAKIKAKU)

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です