PHPでファイルをDLさせるサンプルソースとIEでの文字化け問題

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できるし、文字化けも発生しませんでした。

コメント

タイトルとURLをコピーしました