IEでファイルダウンロードができない

お仕事で不具合修正したのでメモです。

$dl_file = 'hoge/hogehoge.zip';
header("Content-Disposition: inline; filename=$file");
header("Content-Length:$file_length");
header("Content-type: application/zip");
readfile($dl_file);

こんなコードでzipファイルをダウンロードできる仕組みを作ったところ、IEではダウンロードできないといわれました。
そういえば、IEでテストしていませんでした…。

あわてて試してみると…。

Internet Explorerでは、 hoge をダウンロードできません。

このインターネットのサイトを開く事ができませんでした。要求されたサイトが使用できないか、見つけることができません。後でやり直してください。

そんなごむたいな。


早速調べてみると…。
http://blogs.technet.com/b/jpieblog/archive/2009/06/19/3256750.aspx
にヒット。

SSL (HTTPS) のページからファイルのダウンロードをすると、次のエラーメッセージが表示されてダウンロードに失敗することがあります。

HTTP の場合は問題なくダウンロードできるのに、HTTPS 接続だけダウンロードに失敗するような場合は、次の点をご確認ください。

◇[暗号化されたページをディスクに保存しない] のチェックを外す
[インターネットオプション] > [詳細設定] タブ > [暗号化されたページをディスクに保存しない] のチェックをオフにします。
この設定のチェックが有効になっていると、SSL サイトで取得したキャッシュファイルを参照することができずに、ダウンロードに失敗することがあります。

確かに該当サイトはSSLかかっております。
IEの設定を確認しましたが、これには該当せず。
ただ、この下…。

上記の設定以外にも、サーバーのレスポンスに「Cache-Control: no-cache」等のヘッダーが付いている場合はキャッシュを参照できなくなり、同様の問題が発生することがあります。

これがヒントになりました。
firefoxの超便利プラグイン「Httpfox」で調べてみると、ばっちり「Cache-Control: no-cache」がついてました。

原因が分かれば即修正。

$dl_file = 'hoge/hogehoge.zip';
header("Pragma: cache;");
header("Cache-Control: public");
header("Content-Disposition: inline; filename=$file");
header("Content-Length:$file_length");
header("Content-type: application/zip");
readfile($dl_file);

で無事ダウンロードできました。

やれやれです。

IEでファイルダウンロードができない” への1件のフィードバック

コメントを残す

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

CAPTCHA