カテゴリ: PHP
記事投稿日: 2013年12月25日
リンクをクリックしたら、特定のデータを生成してダウンロードさせる、よくある仕組み。
Firefox や Google Chrome では問題ないのに、
IE だけファイルがダウンロードできない。
ここでは、CSV ファイルをダウンロードさせたいのに、
生成している PHP ファイルが対象になり、
ダウンロードできないと警告が表示される。
調べると、マイクロソフトの公式ページで IE のバグと説明されている。
HTTPS でファイルのダウンロードを行おうとするとこのバグが出る。
(『Internet Explorer 6 (IE6) での Content-Disposition: attachment と Cache-Control: no-cache によるダウンロードの問題』)
公式ページに説明があっても、PHP での対応策は書かれていない。
別の記事では「header(“Pragma: public”);」だけを追加するように記述されていたが、
IE8 では動かなかった。
結論としては、キャッシュの設定も必要で、以下の4行が必要。
<変更前>
header(‘Content-Disposition: attachment; filename=”hoge.csv”‘);
header(‘Content-Type: application/octet-stream’);
<変更後>
header(‘Cache-Control: public’);
header(‘Pragma: public’);
header(‘Content-Type: application/octet-stream’);
header(‘Content-Disposition: attachment; filename=”hoge.csv”‘);
個人レベルでは HTTPS 通信を行う機会はあまりないので、良い経験になった。
コメントを残す