fe001abd26
Instead of returning a command which gets executed and which should pass through / stream its output data to the client, we're just returning an instance of Pluf_HTTP_Response. This is needed, because some SCMs, most noticable monotone, have no locally executable command to provide a snapshot archive (and probably never will for our kind of setup). We therefor added a little BSD-licensed class "ZipArchive" which allows the creation of pkzip-compatible archives on the fly by letting it eat the file contents directly feed from the (remote) stdio instance. Download performance is ok and lies between 15K/s and 110K/s, but at least we do no longer block the browser while we pre-generate the zip file server-side. Thanks to Patrick Georgi for all his work!
53 lines
1.1 KiB
PHP
53 lines
1.1 KiB
PHP
<?php
|
|
|
|
# load zipstream class
|
|
require '../zipstream.php';
|
|
|
|
# get path to current file
|
|
$pwd = dirname(__FILE__);
|
|
|
|
# add some random files
|
|
$files = array(
|
|
'../extras/zip-appnote-6.3.1-20070411.txt',
|
|
'../zipstream.php',
|
|
);
|
|
|
|
# create new zip stream object
|
|
$zip = new ZipStream('test.zip', array(
|
|
'comment' => 'this is a zip file comment. hello?'
|
|
));
|
|
|
|
# common file options
|
|
$file_opt = array(
|
|
# file creation time (2 hours ago)
|
|
'time' => time() - 2 * 3600,
|
|
|
|
# file comment
|
|
'comment' => 'this is a file comment. hi!',
|
|
);
|
|
|
|
# add files under folder 'asdf'
|
|
foreach ($files as $file) {
|
|
# build absolute path and get file data
|
|
$path = ($file[0] == '/') ? $file : "$pwd/$file";
|
|
$data = file_get_contents($path);
|
|
|
|
# add file to archive
|
|
$zip->add_file('asdf/' . basename($file), $data, $file_opt);
|
|
}
|
|
|
|
# add same files again wihtout a folder
|
|
foreach ($files as $file) {
|
|
# build absolute path and get file data
|
|
$path = ($file[0] == '/') ? $file : "$pwd/$file";
|
|
$data = file_get_contents($path);
|
|
|
|
# add file to archive
|
|
$zip->add_file(basename($file), $data, $file_opt);
|
|
}
|
|
|
|
# finish archive
|
|
$zip->finish();
|
|
|
|
?>
|