Cross Browser CSV Download

Hello Experts!

I need your magnificent help with another problem I am having.  I have set up a site under SSL and am trying to create a dynamic CSV file generated from the contents of the database that can be downloaded when the user clicks on a link.

As of now, I have it set up so that the link redirects to a new PHP page whereupon I am sending the headers and accessing the database to create the CSV file.  This works fine in Firefox, Chrome and Safari.  However in IE I get the following message:

Internet Explorer cannot download download/ from mysite.com.

Internet Explorer was not able to open this Internet site.  The requested site is either unavailable or cannot be found.  Please try again later.


I have tried various methods to get around this situation without success.  I would like to know if any of you experts have code that will work across all browser platforms to accomplish what I am trying to do.
LVL 17
OmniUnlimitedAsked:
Who is Participating?

[Webinar] Streamline your web hosting managementRegister Today

x
 
MattConnect With a Mentor Commented:
Hi,

Here's the code I'm using, I'll confess I don't fully understand the multiple use of the Content-Type header, but I can say it definitely works in IE 7, 8 and 9.

	header("Pragma: public");
	header("Expires: 0");
	header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
	header("Content-Type: application/force-download");
	header("Content-Type: application/octet-stream");
	header("Content-Type: application/download");;
	header("Content-Disposition: attachment; filename=file_name_here.csv ");
	header("Content-Transfer-Encoding: binary ");
	
	echo $data;
	
	exit();

Open in new window


The $data variable  is a string variable containing the comma separated data.

Hope that helps,

Cheers

Matt
0
 
woepwobinCommented:
Always helpful, those messages from IE.

Can you show the code that generates the link, and the code that sends the headers and data?
0
 
Lukasz ChmielewskiCommented:
What type of database ? MySQL ?
0
The 14th Annual Expert Award Winners

The results are in! Meet the top members of our 2017 Expert Awards. Congratulations to all who qualified!

 
MattConnect With a Mentor Commented:
Hi,

Take a look at this page: http://stackoverflow.com/questions/217424/create-a-csv-file-for-a-user-in-php/6493794#6493794

It may be helpful.

I am currently outputting CSV from one of my sites and I've checked and it works in Chrome, FF and IE but unfortunately I don't have the code to hand.  It's likely you may be missing a header or something which is causing IE to complain.  When I get home if you haven't found a solution yet I'll post the code for you.

Cheers
0
 
woepwobinConnect With a Mentor Commented:
I cannot reproduce the problem.

This is what I usually use:

header('Content-Disposition: attachment; filename="'.$filename.'"');
header('Cache-Control: no-cache, must-revalidate, maxage=1');
header('Cache-Control: maxage=1');
header('Pragma: public');
header('Expires: Fri, 15 Aug 2003 15:00:00 GMT+1'); /* Remember my wedding day :) */
header('Content-Type: application/octet-stream');
header('Content-Length: '.strlen($data));
echo $data;

Open in new window


The only big difference I see with your code is the 'Content-Length' header.
0
 
OmniUnlimitedAuthor Commented:
MattJellings, thank you for taking time and really analyzing my situation for me.  I as well am puzzled by the need for so many headers, but the important thing is that it works!

Thanks to all the experts who participated.
0
 
MattCommented:
Hi,

You're welcome, glad to hear you managed to get it working.

Cheers

Matt
0
All Courses

From novice to tech pro — start learning today.