• 4
name

A PHP Error was encountered

Severity: Notice

Message: Undefined index: userid

Filename: views/question.php

Line Number: 191

Backtrace:

File: /home/prodcxja/public_html/questions/application/views/question.php
Line: 191
Function: _error_handler

File: /home/prodcxja/public_html/questions/application/controllers/Questions.php
Line: 433
Function: view

File: /home/prodcxja/public_html/questions/index.php
Line: 315
Function: require_once

name Punditsdkoslkdosdkoskdo

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

I'm struggling with an odd error. I have a simple web app that grabs stuff from a DB then outputs it as a downloadable csv file. It works on firefox and chrome, but IE fails to recognize it as a csv file (thinking it is a html fle) and when I click save I get the error, "Unable to download {name of file} from {name of site}. Unable to open this internet site. ..."

Code:

session_start();

//some logic goes here...  

//generate csv header  
header("Content-type: application/octet-stream");  
header("Content-Disposition: attachment; filename=exportevent.csv");  
header("Pragma: no-cache");  
header("Expires: 0");  

echo "Event: " . $event_title . "\n";  

//print the column names  
echo "Last Name, First Name, Company \n";  

while($row = mysql_fetch_assoc($result))  
{  
    echo $row['atlname'] . ',' . $row['atfname'] . ',' . $row['atcompany'] . "\n";      
}

I've played around with the content-type a whole bunch, but that had no effect.

Update: I've tried text/csv, application/vnd.ms-excel (and variations of this), text/plain, and some others that I now forget with no luck.

This is IE8 btw.

Update 2: The connection is over SSL.

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.

  • 56
Reply Report
    • I've found the minimum headers for FF 3.6 and IE 8 are: header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Content-type: application/octet-stream"); header("Content-Disposition: attachment; filename="".$filename.""");
      • 2
    • Ah, throw out an old Excel plugin and roll your own CSV creator - IE8 barfs all over your download. Thank you :]

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));
  • 6
Reply Report

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"
  • 4
Reply Report

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");
  • 4
Reply Report

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.

  • 2
Reply Report

Try setting your content type to text/csv instead of application/octet-stream.

Since application/octet-stream is a generic binary mime type (and doesn't match the '.csv' extension), Internet explorer might be ignoring it and computing the mime type based on the file extension.

  • 1
Reply Report

The solution for me was:

header_remove(); 
header('Content-Type: text/csv'); 
header('Content-Disposition: attachment; filename=brokerlist.csv'); 
echo $content;
  • 0
Reply Report

Some time ago I've got a problem with IE6 opening pdf files, and crashing when AdobeReader 6.0 was installed and tried to open file in browser window. Than I found somewhere this header:

header('Content-Type: application/force-download');

And it solved the problem, every pdf file was downloaded and opened in Adobe instead of IE.

  • -1
Reply Report

This simply doesn't make sense. I tried the accepted answer, all the other answers in here, and it didn't work for me. I tried their permutations, and somehow I managed to make it work in IE like so:

 header("Pragma: public");
 header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
 header("Cache-Control: public");
 header("Content-Type: application/vnd.ms-exce");
 header("Content-Disposition: attachment; filename=coupons.csv" );
 header("Content-Transfer-Encoding: binary");       
 header("Content-Length: " . strlen($csv)); 
 echo $csv;
 die();

One thing I did is to empty the cache every freaking time I test the code. And it still doesn't make sense. Just in case someone might need this desperately ;)

  • -1
Reply Report
      • 1
    • Depending on the end user platform the "Content-Type: application/vnd.ms-exce" will not work on Mac and Linux clients. As long as your page visitors all run Windows you are ok.

After using Javascript it will solve your problem.

Use this for IE,

    var IEwindow = window.open();
    IEwindow.document.write('sep=,\r\n' + CSV);
    IEwindow.document.close();
    IEwindow.document.execCommand('SaveAs', true, fileName + ".csv");
    IEwindow.close();

For more information i have written tutorial on that, see - Download JSON data in CSV format Cross Browser Support

Hope this will be helpful for you.

  • -1
Reply Report

If you are trying to accomplish this task (getting a CSV file to download in IE8) using Salesforce.com (in which case your front-end is Visualforce and you can't set all of the headers, only some of them), here's what you need:

<apex:page cache="true" 
        contentType="application/octet-stream#myAwesomeFileName.csv" 
        showHeader="false" sidebar="false" standardStylesheets="false">
     <apex:outputText value="{!csvContent}" escape="false"/>
</apex:page>

The key pieces here are cache=true, which, in conjunction with the default expires=0 attribute, achieves the following headers:

header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public");

And then the contentType of application/octet-stream --- doing text/csv fails for IE8.

  • -2
Reply Report

Warm tip !!!

This article is reproduced from Stack Exchange / Stack Overflow, please click

Trending Tags

Related Questions