tags:

views:

1320

answers:

2

What's the easiest way to zip, say 2 files, from a folder on the server and force download? Without saving the "zip" to the server.

    $zip = new ZipArchive();
   //the string "file1" is the name we're assigning the file in the archive
$zip->addFile(file_get_contents($filepath1), 'file1'); //file 1 that you want compressed
$zip->addFile(file_get_contents($filepath2), 'file2'); //file 2 that you want compressed
$zip->addFile(file_get_contents($filepath3), 'file3'); //file 3 that you want compressed
echo $zip->file(); //this sends the compressed archive to the output buffer instead of writing it to a file.

Can someone verify: I have a folder with test1.doc, test2.doc, and test3.doc

with the above example - file1 (file2 and file3) might just be test1.doc, etc.

do I have to do anything with "$filepath1"? Is that the folder directory that holds the 3 docs?

Sorry for my basic question..

+1  A: 

If you have access to the zip commandline utility you can try

<?php
$zipped_data = `zip -q - files`;
header('Content-type: application/zip');
header('Content-Disposition: attachment; filename="download.zip"');
echo $zipped_data;
?>

where files is the things you want to zip and zip the location to the zip executable.

This assumes Linux or similar, of course. In Windows you might be able to do similar with another compression tool, I guess.

There's also a zip extension, usage shown here.

Vinko Vrsalovic
Edit your question with the error you get. First suspect is that you don't have the zip extension installed.
Vinko Vrsalovic
+3  A: 

Your code is very close. You need to use the file name instead of the file contents.

$zip->addFile(file_get_contents($filepath1), 'file1');

should be

$zip->addFile($filepath1, 'file1');

http://us3.php.net/manual/en/function.ziparchive-addfile.php

If you need to add files from a variable instead of a file you can use the addFromString function.

$zip->addFromString( 'file1', $data );
sakabako