How do I get csv file to download on IE? Works on firefox

Don't we love IE? :)

Try using those headers:

  header("Pragma: public");
  header("Expires: 0");
  header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
  header("Cache-Control: private",false);
  header("Content-Type: application/octet-stream");
  header("Content-Disposition: attachment; filename=\"exportevent.csv\";" );
  header("Content-Transfer-Encoding: binary"); 

I think that the octet-stream content type forces IE to download the file.


We recently ran into this problem ourselves. See this MSKB article

These are the headers we ended up having to use to get it to work over SSL.

header("Expires: Sat, 01 Jan 2000 00:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public");
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"$file_name\";");
header("Content-length: " . strlen($csv_string));

I've had success with the following:

header("Content-type: application/vnd.ms-excel");
header("Content-disposition: attachment; filename=File.csv");

Setting the type to application/vnd.ms-excel seemed to do the trick in my case. This is all in a file that is opened by submitting a form using

target="_blank"

The only extra code I had to add for IE to work with SSL was: header("Pragma: public"); So my headers look like this now:

 header("Pragma: public");  
 header("Content-Type: application/octet-stream");
 header("Content-Disposition: attachment; filename=some_filename.csv");

We have just had the same issue and after adding many headers and getting a working link I then removed them one by one and found the key one for us was "Cache-Control: public" so in the end we just had

header("Cache-Control: public"); 
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=some_filename.csv");

which worked fine.