| <?php if (!defined('BASEPATH')) exit('No direct script access allowed'); |
| /** |
| * Code Igniter |
| * |
| * An open source application development framework for PHP 4.3.2 or newer |
| * |
| * @package CodeIgniter |
| * @author Rick Ellis |
| * @copyright Copyright (c) 2006, pMachine, Inc. |
| * @license http://www.codeignitor.com/user_guide/license.html |
| * @link http://www.codeigniter.com |
| * @since Version 1.0 |
| * @filesource |
| */ |
| |
| // ------------------------------------------------------------------------ |
| |
| /** |
| * Zip Compression Class |
| * |
| * This class is based on a library aquired at Zend: |
| * http://www.zend.com/codex.php?id=696&single=1 |
| * |
| * I'm not sure this library is all that reliable, and the |
| * directory feature doesn't seem to work right, but it's the only |
| * zip compressor I'm aware of -- Rick Ellis |
| * |
| * @package CodeIgniter |
| * @subpackage Libraries |
| * @category Encryption |
| * @author Rick Ellis |
| * @link http://www.codeigniter.com/user_guide/general/encryption.html |
| */ |
| class Zip { |
| |
| var $zdata = array(); |
| var $cdir = array(); |
| var $offset = 0; |
| |
| /** |
| * Add a Directory |
| * |
| * @access public |
| * @param string |
| * @return void |
| */ |
| function add_dir($name) |
| { |
| $name =str_replace ("\\", "/", $name); |
| |
| $fd = "\x50\x4b\x03\x04\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) |
| .$name; |
| |
| $this->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 |
| ?> |