I have a php/mysql site in which I am trying to download a comma delimited file (CSV). The csv file I create contains comma delimited data (name, address, city, state). I create the csv file ok and place it in the site's /downloads directory. So far so good. I have been looking on line and the code to trigger the browser's download prompt that I see the most often is:
$path = $_SERVER['DOCUMENT_ROOT'];
$exportfile = "emailclientaddresses.csv";
$fullpath = "downloads/" . $exportfile;
header("Content-type: text/plain");
header("Content-Length: ".filesize($exportfile));
header("Content-Disposition: attachment; filename=" . $fullpath);
The $exportfile is the csv file that my code created. It's ok. What this does is:
- The $fullpath is displayed in the browser download prompt in a very weird format: download_emailclientaddresses.csv
- When it does download, the current webpage is downloaded or a combination of the csv file and the current web page.
OK, I have tried a lot of things and nothing has worked. So, if anyone can help me I would appreciate it. Thank you.
ed Cohen
The PHP documentation provides a nice example:
EDIT (Response to comment, explanation)
Do not display in the browser, but transfer the file.
File is a binary file.
Browsers generally download binary files, unless they can display them.
Make the download dialog show the proper file name.
Note: You can use any file name.
File should not be cached by the browser.
Cache could cause trouble in case of dynamic content.
Send the correct file size to the browser,
otherwise the browser is unable to estimate the transfer-time.
Make sure the headers are send to the browser before the download starts.
Send the file to the browser.
Done :)