IE6だと、csvファイルがダウンロードできない というメモ。



f:id:tenman:20060801195449j:image
少しだけ便利に、と思いついて、WEB上のテキストファイルを、CSVとしてダウンロードしようと思い立った。

しかし、ffなどでは問題ないのに、ie6だと、エラーになって、ダウンロードできない。

まるで、GoogleMaps1 みたいなことになってきた。などと思いつつ、対策した。

問題のあるスクリプト

<?php
header("Content-type: text/csv");
header("Content-Disposition: attachment; filename=downloaded.csv");
echo mb_convert_encoding(file_get_contents('../../log/sample.txt'),"SHIFT_JIS","auto");

exit;
?>

何とかダウンロードできたスクリプト

<?php
header("Cache-Control: public");
header("Pragma: public");
header("Content-type: text/csv");
header("Content-Disposition: attachment; filename=downloaded.csv");
echo mb_convert_encoding(file_get_contents('../../log/sample.txt'),"SHIFT_JIS","auto");

exit;
?>

さて、その根拠は

マイクロソフト

Content-Disposition:attachment や Cache-Control:no-cache を使うとファイル名が見つからない内容のエラーが発生し、ファイルを開くことができない場合があります。

対策:
Content-Disposition に inline を指定する等、Content-Disposition:attachment ヘッダーを使用しない、またはキャッシュを制限しないことにより現象を回避することが可能

Content-Disposition 用語解説


エンティティの提示方法を示すフィールドの名前です。RFC2183で定義されています。Content-Disposition:フィールドのボディは、ディスポジションタイプと補足的なパラメタリストから構成されます。

Content-Disposition: attachment;
filename=genome.jpeg; modification-date="Wed, 12 Feb 1997 16:29:51 -0500"

の場合、ディスポジションタイプは attachment で、これに対して、二つの補足的なパラメタが指定されています。ディスポジションタイプ "attachment" は、エンティティがユーザの指示を受けてから提示されるべきであることを示します。二つのパラメタはファイル名と最終更新日時を示しています。

Content-Disposition: inline

の場合、ディスポジションタイプは inlineで、パラメタは一つも指定されていません。ディスポジションタイプ "inline" は、エンティティが自動的に提示されるべきであることを示します。

f:id:tenman:20060801200208j:image:w400