The problem: how do you dynamically generate arbitrarily large downloadable zip files from PHP? All of the existing solutions I found all generate a local temp file, which means the server needs to
- have a web-writable directory large enough to store the intermediate temp file, and
- be able to generate and start streaming the entire file before the client times out
I wasn't particularly fond of either constraint, so I came up with a solution: ZipStream-PHP. ZipStream is a library for dynamically streaming dynamic zip files from PHP without writing to the disk at all on the server. Using it is dirt simple, too. Here's how:
# create a new stream object
$zip = new ZipStream('example.zip');
# then add one or more files
# add first file
$data = file_get_contents('some_file.gif');
$zip->add_file('some_file.gif', $data);
# add second file
$data = file_get_contents('another_file.txt');
$zip->add_file('another_file.txt', $data);
# finally, finish the stream
$zip->finish();
You can also set file comments and creation dates, like so:
$data = file_get_contents('foo.txt');
$zip->add_file('foo.txt', $data, array(
'comment' => 'this is an interesting comment',
'time' => time() - 3600, # created one hour ago
));
Here are the links, enjoy: