PHPでファイルをダウンロードさせる処理を作成する必要があったので
メモしておきます。
処理自体は難しい事はありません。
HTTPヘッダを3つ出力するだけです。
1. Content-Disposition: inline; filename="ファイル名"
2. Content-Length: データサイズ
3. Content-Type: application/octet-stream
$name = ファイル名 $path = ファイルの相対/絶対パス $length=データサイズ
/* ダウンロードさせる時のファイル名 */ header("Content-Disposition: inline; filename=\"".basename($name)."\""); /* ファイルサイズ */ header("Content-Length: ".$length); header("Content-Type: application/octet-stream"); /* 対象ファイルを出力する */ readfile($path)
※ファイルの存在チェック等は忘れないように
基本的にはこれだけでOKなんですが、問題がありまして、
日本語ファイル名をIEでダウンロードするときの文字化け対策
http://moodle.org/mod/forum/discuss.php?d=72567
という感じでIEで日本語ファイル名でダウンロードさせるようにすると、
文字化けが発生するんです。どうもIEのバグのようですね。
解決方法としてはファイル名をurlencodeしてやれば良いようで、
if( strpos($_SERVER[‘HTTP_USER_AGENT’],”MSIE”) &&
!strpos($_SERVER[‘HTTP_USER_AGENT’],”Opera”)){
$name = urlencode($name);
}
これを追加して対応。
ちゃんとDLできるし、文字化けも発生しませんでした。
コメント