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できるし、文字化けも発生しませんでした。
![[Tags]](https://gunzine.net/wp-content/uploads/2012/02/20120207_02.png)


コメント