From ae58a5de4fc040847c43209173dbc7f1193f6c53 Mon Sep 17 00:00:00 2001 From: admin Date: Sat, 30 Sep 2006 19:25:07 +0000 Subject: --- system/libraries/Zip.php | 154 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 154 insertions(+) create mode 100644 system/libraries/Zip.php diff --git a/system/libraries/Zip.php b/system/libraries/Zip.php new file mode 100644 index 000000000..9cfe9593d --- /dev/null +++ b/system/libraries/Zip.php @@ -0,0 +1,154 @@ +cdata[] = $fd; + + $cd = "\x50\x4b\x01\x02\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00" + .pack("V", 0) + .pack("V", 0) + .pack("V", 0) + .pack("v", strlen ($name)) + .pack("v", 0) + .pack("v", 0) + .pack("v", 0) + .pack("v", 0) + .pack("V", 16) + .pack("V", $this->offset) + .$name; + + $this->offset = strlen(implode('', $this->cdata)); + + $this->cdir[] = $cd; + } + + // -------------------------------------------------------------------- + + /** + * Add a File + * + * @access public + * @param string + * @return void + */ + function add_file($data, $name) + { + $name = str_replace("\\", "/", $name); + + $u_len = strlen($data); + $crc = crc32($data); + $data = gzcompress($data); + $data = substr(substr($data, 0,strlen ($data) - 4), 2); + $c_len = strlen($data); + + $fd = "\x50\x4b\x03\x04\x14\x00\x00\x00\x08\x00\x00\x00\x00\x00" + .pack("V", $crc) + .pack("V", $c_len) + .pack("V", $u_len) + .pack("v", strlen($name)) + .pack("v", 0) + .$name + .$data + .pack("V", $crc) + .pack("V", $c_len) + .pack("V", $u_len); + + $this->zdata[] = $fd; + + $cd = "\x50\x4b\x01\x02\x00\x00\x14\x00\x00\x00\x08\x00\x00\x00\x00\x00" + .pack("V", $crc) + .pack("V", $c_len) + .pack("V", $u_len) + .pack("v", strlen ($name)) + .pack("v", 0) + .pack("v", 0) + .pack("v", 0) + .pack("v", 0) + .pack("V", 32 ) + .pack("V", $this->offset) + .$name; + + $this->offset = strlen(implode('', $this->zdata)); + + $this->cdir[] = $cd; + } + + // -------------------------------------------------------------------- + + /** + * Output the zip file + * + * @access public + * @return string + */ + function output_zipfile() + { + $data = implode("", $this->zdata); + $cdir = implode("", $this->cdir); + + return $data + .$cdir + ."\x50\x4b\x05\x06\x00\x00\x00\x00" + .pack("v", sizeof($this->cdir)) + .pack("v", sizeof($this->cdir)) + .pack("V", strlen($cdir)) + .pack("V", strlen($data)) + ."\x00\x00"; + } + +} +// END CLASS +?> \ No newline at end of file -- cgit v1.2.3-24-g4f1b