お仕事で不具合修正したのでメモです。
$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);
で無事ダウンロードできました。
やれやれです。
1 comment on “IEでファイルダウンロードができない”
解決しました。ありがとうございました!