The branch, master has been updated via 5e557a89b7362aad1e11250659345256354389c8 (commit) via 69f164291f8792dbf0d8641b25a08b49515fad1f (commit) via c38b3ad1ce6e2012ff01d5e61d4632c12aacb418 (commit) via 39210c606d8239d3a000cb2181e11b7fe47a5284 (commit) from d6b8d71f95b9c41b11de35a69269213e9902a5c8 (commit)
- Log ----------------------------------------------------------------- commit 5e557a89b7362aad1e11250659345256354389c8 Author: Michal Čihař mcihar@novell.com Date: Tue May 17 15:29:22 2011 +0200
Create file without storing in memory
commit 69f164291f8792dbf0d8641b25a08b49515fad1f Author: Michal Čihař mcihar@novell.com Date: Tue May 17 15:23:08 2011 +0200
Avoid duplicating code
commit c38b3ad1ce6e2012ff01d5e61d4632c12aacb418 Author: Michal Čihař mcihar@novell.com Date: Tue May 17 15:21:49 2011 +0200
Whitespace cleanup
commit 39210c606d8239d3a000cb2181e11b7fe47a5284 Author: Brian Carcich drbitboy@users.sourceforge.net Date: Tue May 17 15:21:15 2011 +0200
Add support to output zip content on the fly.
-----------------------------------------------------------------------
Summary of changes: libraries/zip.lib.php | 48 +++++++++++++++++++++++++++++++++++++++--------- webapp.php | 9 +++++---- 2 files changed, 44 insertions(+), 13 deletions(-)
diff --git a/libraries/zip.lib.php b/libraries/zip.lib.php index a8bcb98..443b173 100644 --- a/libraries/zip.lib.php +++ b/libraries/zip.lib.php @@ -28,6 +28,13 @@ class zipfile { /** + * Whether to echo zip as it's built or return as string from -> file + * + * @var boolean $doWrite + */ + var $doWrite = false; + + /** * Array to store compressed data * * @var array $datasec @@ -57,6 +64,21 @@ class zipfile
/** + * Sets member variable this -> doWrite to true + * - Should be called immediately after class instantiantion + * - If set to true, then ZIP archive are echo'ed to STDOUT as each + * file is added via this -> addfile(), and central directories are + * echoed to STDOUT on final call to this -> file(). Also, + * this -> file() returns an empty string so it is safe to issue a + * "echo $zipfile;" command + * + * @access public + */ + function setDoWrite() { + $this -> doWrite = true; + } // end of the 'setDoWrite()' method + + /** * Converts an Unix timestamp to a four byte DOS date and time format (date * in high two bytes, time in low two bytes allowing magnitude comparison). * @@ -133,8 +155,12 @@ class zipfile //$fr .= pack('V', $c_len); // compressed filesize //$fr .= pack('V', $unc_len); // uncompressed filesize
- // add this entry to array - $this -> datasec[] = $fr; + // echo this entry on the fly, ... + if ( $this -> doWrite) { + echo $fr; + } else { // ... OR add this entry to array + $this -> datasec[] = $fr; + }
// now add to central directory record $cdrec = "\x50\x4b\x01\x02"; @@ -165,26 +191,30 @@ class zipfile
/** - * Dumps out file + * Echo central dir if ->doWrite==true, else build string to return * - * @return string the zipped file + * @return string if ->doWrite {empty string} else the ZIP file contents * * @access public */ function file() { - $data = implode('', $this -> datasec); $ctrldir = implode('', $this -> ctrl_dir); - - return - $data . - $ctrldir . + $header = $ctrldir . $this -> eof_ctrl_dir . pack('v', sizeof($this -> ctrl_dir)) . // total # of entries "on this disk" pack('v', sizeof($this -> ctrl_dir)) . // total # of entries overall pack('V', strlen($ctrldir)) . // size of central dir pack('V', strlen($data)) . // offset to start of central dir "\x00\x00"; // .zip file comment length + + if ( $this -> doWrite ) { // Send central directory & end ctrl dir to STDOUT + echo $header; + return ""; // Return empty string + } else { // Return entire ZIP archive as string + $data = implode('', $this -> datasec); + return $data . $header; + } } // end of the 'file()' method
} // end of the 'zipfile' class diff --git a/webapp.php b/webapp.php index 86d6bf1..cdc0a87 100644 --- a/webapp.php +++ b/webapp.php @@ -44,11 +44,12 @@ foreach ($parameters as $key => $value) { $ini_file .= $key . '=' . $value . "\n"; }
+header('Content-Type: application/webapp'); +header('Content-Disposition: attachment; filename="' . $name . '"'); + $zip = new zipfile; +$zip->setDoWrite(); $zip->addFile($ini_file, 'webapp.ini'); $zip->addFile(file_get_contents($icon), 'phpMyAdmin.ico'); - -header('Content-Type: application/webapp'); -header('Content-Disposition: attachment; filename="' . $name . '"'); -echo $zip->file(); +$zip->file(); ?>
hooks/post-receive