zip file download using php in ie8 - php

I was able to zip a folder and download the zip file using PHP code in "chrome" and "FF" browsers. But when I try that in IE8 it shows the downloaded zip file as a file of unknown type. I will have to open it with rar application specifically but I am looking to make this zip file download directly as .zip file in IE8 as it is happening in the other browsers. The following are the headers I used for it:
header("Pragma: public");
header("Pragma: no-cache");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-type: application/zip");
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($archive_file_name));
header("Content-Disposition: attachment; filename=$archive_file_name");
readfile("$archive_file_name");
unlink($archive_file_name);
Can someone please let me know where I need to correct the code? Thanks

header("Content-Disposition: attachment; filename=$archive_file_name");
Make sure $archive_file_name is just a name not a whole path, also it needs to be url encoded and should probably have a ".zip" extension at the end.
header("Content-type: application/zip");
Why is the t in "type" lower cased?

You are overwriting some headers, some are needed just for IE, some for other browsers, IE is more picky.
Look at this link:
http://www.boutell.com/newfaq/creating/forcedownload.html

Related

Download PDF without automatic view

I have a problem with php force download.
I tried a lot of code but no one resolve problem. I need to download file with php (the name of file is sent with querystring and files are stored in a folder protected by htaccess). With this code I can download for example a pics (the browser correctly ask with file dialog where saving it) but when I try to download a pdf file the browser don't open file dialog and save it in default download folder and automatically open pdf with default pdf viewer.
Is there a possibility to open file dialog for pdf file and download like other file like pics without automatic download and opening it?
$file = $_GET['file'];
$url = "{$_SERVER['DOCUMENT_ROOT']}images/files/".$file;
header("Pragma: public");
header("Expires: 0");
header("Pragma: no-cache");
header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0");
header("Content-Type: application/force-download");
header('Content-disposition: attachment; filename=' . basename($url));
header("Content-Transfer-Encoding: binary");
header('Content-Length: ' . filesize($url));
#readfile($url);
exit(0);

php download excel file

I write php code downloading excel file, when I test it on my localhost everything fine, the file can be open, however when I go to my server and I test the code, the file is no more readable. Here is my code
$file = basename($path);
if(file_exists($path)){
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false);
header("Content-Description: File Transfer");
header("Content-Disposition: attachment; filename=\"$file\"");
header("Content-Type: application/vnd.ms-excel");
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($path));
readfile($path);
exit;
}
for the envir , I use PHP Version 7.2.19 in local and 7.0.33 in my server, and I try all the content-type that i found but no one work .
ob_clean();
put that code before all header declaration.

PDF downloads with PHP, Content Disposition Header causes a network error

I've used PHP to mask the directory for PDF downloads for years with the following code with no issues. Then I upgraded from PHP 5.6 to 7.2 yesterday and the code no longer works, but I'm stuck figuring out what the problem is.
Currently, if I click on the download link, the file downloads, but then, at the very end, there is an error message reading "Failed-Network Error" (in Chrome) and "The Network connection is interrupted" (in Safari) and the file can't be opened.
The error log on the server is empty.
Code snippet follows:
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Type: application/pdf");
header("Content-Disposition: attachment; filename=".$filename.";");
header("Content-Length: ".filesize($filepath.$filename)."");
ob_end_flush();
readfile($filepath.$filename);
Now if I change the following:
Content-Disposition: attachment;
to:
Content-Disposition: inline;
Then the above works, but as some of the PDFs are large (they range in size from 2 MB to about 80MB), this isn't really a desirable situation and I'd like the file being downloaded to be the default action.
Any thoughts much appreciated.
Thanks!

Large zip downloads failing only in IE

I have a little script which sets the header to force download of a zip file with:
if(ini_get('zlib.output_compression')) {
ini_set('zlib.output_compression', 'Off');
}
header("Pragma: public");
header('Expires: '.gmdate('D, d M Y H:i:s').' GMT');
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false);
header("Content-Description: File Transfer");
header("Content-type: application/octet-stream");
header('Content-Disposition: attachment; filename="'.$mp3.'"');
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".#filesize($file));
#readfile($file) OR die("<html>...</html>");
exit;
Everything works fine in Chrome and Firefox but fails in IE 9. I have tried many different ways of setting those headers after googling around but nothing helps. Then I tried a different smaller zip file and it worked! Then I tried a bigger zip file and again fail. Would this be some setting on the server or the php.ini or something? Why does it only affect IE?
When it fails in IE it looks like it downloads.. says completed. But the file is 0 bytes.
Thanks for any help!
If the file is large enough you may have issues related to memory, execution time, etc.
Instead of trying to read the file, you could use the x-sendfile header:
header('x-sendfile: '.$file);
Check out this article about it: http://www.jasny.net/articles/how-i-php-x-sendfile/

IE download incomplete even though it claims success

I'm serving a zipped up file for my clients to download and it works in every OS/Browser except for IE.
The zipped file is 550 MB. When I use IE 8 the file downloads between 50 - 70 MBs and then claims that the download is complete even though the original file is 550 MB.
I'm wondering if I missing some required headers or something. Here is the php code I'm using to serve the file.
<?php
header("Content-type: application/zip");
header("Content-Disposition: attachment; filename=$dnfilename");
header("Content-Length: ".filesize($ZIPFILE));
header("Pragma: no-cache");
header("Expires: 0");
readfile("$ZIPFILE");
?>
I don't know if this helps, but the following works for me on IE8 - 9, Chrome and Firefox using a 1.5GB zip file.
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"".$dnfilename."\"");
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($ZIPFILE));
readfile($ZIPFILE);
Have a look at this article: HTTP Headers for ZIP File Downloads
I have had the same problem in IE7 and IE8. IE9 and other browsers worked just fine. If you change your Content-Type header, it works.
Change
header("Content-type: application/zip");
to
header("Content-type: application/octet-stream");

Categories