Skip to content

気ままにWeb

webに関するもろもろ書いていきます。

気ままにWeb

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

1

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

$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);

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

やれやれです。

Internet Explorer, PHP

1 comment on “IEでファイルダウンロードができない”

  1. NORI より:
    2013/05/03 19:46

    解決しました。ありがとうございました!

    返信

コメントを残す コメントをキャンセル

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

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください。

Idealist by NewMediaThemes