Re: ZIP file download [message #175824 is a reply to message #175821] |
Thu, 27 October 2011 21:54 |
Jerry Stuckle
Messages: 2598 Registered: September 2010
Karma:
|
Senior Member |
|
|
On 10/27/2011 12:59 PM, JustWondering wrote:
> On Oct 27, 6:39 am, JustWondering<eastside...@gmail.com> wrote:
>> On Oct 27, 5:07 am, "Álvaro G. Vicario"
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> <alvaro.NOSPAMTH...@demogracia.com.invalid> wrote:
>>> El 27/10/2011 12:29, JustWondering escribió/wrote:
>>
>>>> I am trying to write a script to download a zip file. Here's what I
>>>> have:
>>
>>>> header("Cache-Control: no-store, no-cache");
>>>> header("Content-Description: File Transfer");
>>>> header("Content-Type: application/octet-stream");
>>>> header("Content-Disposition: attachment; filename="zipfile.zip");
>>
>>> You have an unmatched quote so I guess this is not the literal code your
>>> are running. Make sure that the real code does not add bogus white-space
>>> before of after the file. You can test that if you open the file in an
>>> hexadecimal editor (though a regular editor may do the trick).
>>
>>> You can end up with a bogus byte if you've saved the PHP source as UTF-8
>>> and your editor is configured to write the Unicode BOM (byte-order marker).
>>
>>>> header("Content-Transfer-Encoding: binary");
>>
>>>> $outstream = fopen("php://output",'w');
>>
>>>> $file = fopen("myfile.zip","rb");
>>>> if ($file) {
>>>> while(!feof($file)) {
>>>> fwrite($outstream, fread($file, 2048));
>>>> }
>>>> fclose($file);
>>>> }
>>>> fclose($outstream);
>>
>>>> When I run the script, I get a dialog box asking me to save the file.
>>>> The file is saved fine, but I cannot open it from the Windows Explorer
>>>> (Windows tells that the compressed file is invalid). 7Zip however has
>>>> no problem opening it and extracting the files. Any ideas?
>>
>>> --
>>> --http://alvaro.es-Álvaro G. Vicario - Burgos, Spain
>>> -- Mi sitio sobre programación web:http://borrame.com
>>> -- Mi web de humor satinado:http://www.demogracia.com
>>> --
>>
>> In the real code, U have a variable where the file names are. I
>> replaced that with actual file names to avoid any confusion. I guess
>> in the process I messed up the quotes.
>>
>> In any case, I opened up the downloaded file in a binary editor and
>> found that the entire HEAD section is added upfront (names of style
>> sheets, description, etc.). How do I prevent this from happening?
>
> Problem solved. Here's what I did:
>
> header("Pragma: public");
> header("Expires: 0");
> header("Cache-Control: must-revalidate, post-check=0, pre-
> check=0");
> header("Content-Description: File Transfer");
> header("Content-Type: application/octet-stream");
> header("Content-Disposition: attachment; filename=\"targetfile.zip
> \"");
> header("Content-Transfer-Encoding: binary");
> header("Content-Length: " . filesize('sourcefile.zip'));
> ob_clean();
> flush();
> readfile ('sourcefile.zip');
It's much easier than that. Just don't put a HEAD section in there.
<HEAD> is for (X)HTML. You are sending a zip file. Not at all the same
thing.
Your script should ONLY contain (starting on line 1):
<?php
header(...)
etc. ...
readfile('sourcefile.zip')
?>
--
==================
Remove the "x" from my email address
Jerry Stuckle
JDS Computer Training Corp.
jstucklex(at)attglobal(dot)net
==================
|
|
|