<?php
/*******************************************************************
*[TTTuangou] (C)2005 - 2011 Cenwor Inc.
*
* This is NOT a freeware, use is subject to license terms
*
* @Filename zip.ex.pcl.php $
*
* @Author http://www.tttuangou.net $
*
* @Date 2011-11-15 13:48:25 $
*******************************************************************/
if (!defined('PCLZIP_READ_BLOCK_SIZE')) {define( 'PCLZIP_READ_BLOCK_SIZE', 2048 );}if (!defined('PCLZIP_SEPARATOR')) {define( 'PCLZIP_SEPARATOR', ',' );}if (!defined('PCLZIP_ERROR_EXTERNAL')) {define( 'PCLZIP_ERROR_EXTERNAL', 0 );}if (!defined('PCLZIP_TEMPORARY_DIR')) {define( 'PCLZIP_TEMPORARY_DIR', '' );}if (!defined('PCLZIP_TEMPORARY_FILE_RATIO')) {define( 'PCLZIP_TEMPORARY_FILE_RATIO', 0.47 );}$g_pclzip_version = "2.8.2";define( 'PCLZIP_ERR_USER_ABORTED', 2 );define( 'PCLZIP_ERR_NO_ERROR', 0 );define( 'PCLZIP_ERR_WRITE_OPEN_FAIL', -1 );define( 'PCLZIP_ERR_READ_OPEN_FAIL', -2 );define( 'PCLZIP_ERR_INVALID_PARAMETER', -3 );define( 'PCLZIP_ERR_MISSING_FILE', -4 );define( 'PCLZIP_ERR_FILENAME_TOO_LONG', -5 );define( 'PCLZIP_ERR_INVALID_ZIP', -6 );define( 'PCLZIP_ERR_BAD_EXTRACTED_FILE', -7 );define( 'PCLZIP_ERR_DIR_CREATE_FAIL', -8 );define( 'PCLZIP_ERR_BAD_EXTENSION', -9 );define( 'PCLZIP_ERR_BAD_FORMAT', -10 );define( 'PCLZIP_ERR_DELETE_FILE_FAIL', -11 );define( 'PCLZIP_ERR_RENAME_FILE_FAIL', -12 );define( 'PCLZIP_ERR_BAD_CHECKSUM', -13 );define( 'PCLZIP_ERR_INVALID_ARCHIVE_ZIP', -14 );define( 'PCLZIP_ERR_MISSING_OPTION_VALUE', -15 );define( 'PCLZIP_ERR_INVALID_OPTION_VALUE', -16 );define( 'PCLZIP_ERR_ALREADY_A_DIRECTORY', -17 );define( 'PCLZIP_ERR_UNSUPPORTED_COMPRESSION', -18 );define( 'PCLZIP_ERR_UNSUPPORTED_ENCRYPTION', -19 );define( 'PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE', -20 );define( 'PCLZIP_ERR_DIRECTORY_RESTRICTION', -21 );define( 'PCLZIP_OPT_PATH', 77001 );define( 'PCLZIP_OPT_ADD_PATH', 77002 );define( 'PCLZIP_OPT_REMOVE_PATH', 77003 );define( 'PCLZIP_OPT_REMOVE_ALL_PATH', 77004 );define( 'PCLZIP_OPT_SET_CHMOD', 77005 );define( 'PCLZIP_OPT_EXTRACT_AS_STRING', 77006 );define( 'PCLZIP_OPT_NO_COMPRESSION', 77007 );define( 'PCLZIP_OPT_BY_NAME', 77008 );define( 'PCLZIP_OPT_BY_INDEX', 77009 );define( 'PCLZIP_OPT_BY_EREG', 77010 );define( 'PCLZIP_OPT_BY_PREG', 77011 );define( 'PCLZIP_OPT_COMMENT', 77012 );define( 'PCLZIP_OPT_ADD_COMMENT', 77013 );define( 'PCLZIP_OPT_PREPEND_COMMENT', 77014 );define( 'PCLZIP_OPT_EXTRACT_IN_OUTPUT', 77015 );define( 'PCLZIP_OPT_REPLACE_NEWER', 77016 );define( 'PCLZIP_OPT_STOP_ON_ERROR', 77017 );define( 'PCLZIP_OPT_EXTRACT_DIR_RESTRICTION', 77019 );define( 'PCLZIP_OPT_TEMP_FILE_THRESHOLD', 77020 );define( 'PCLZIP_OPT_ADD_TEMP_FILE_THRESHOLD', 77020 ); define( 'PCLZIP_OPT_TEMP_FILE_ON', 77021 );define( 'PCLZIP_OPT_ADD_TEMP_FILE_ON', 77021 ); define( 'PCLZIP_OPT_TEMP_FILE_OFF', 77022 );define( 'PCLZIP_OPT_ADD_TEMP_FILE_OFF', 77022 ); define( 'PCLZIP_ATT_FILE_NAME', 79001 );define( 'PCLZIP_ATT_FILE_NEW_SHORT_NAME', 79002 );define( 'PCLZIP_ATT_FILE_NEW_FULL_NAME', 79003 );define( 'PCLZIP_ATT_FILE_MTIME', 79004 );define( 'PCLZIP_ATT_FILE_CONTENT', 79005 );define( 'PCLZIP_ATT_FILE_COMMENT', 79006 );define( 'PCLZIP_CB_PRE_EXTRACT', 78001 );define( 'PCLZIP_CB_POST_EXTRACT', 78002 );define( 'PCLZIP_CB_PRE_ADD', 78003 );define( 'PCLZIP_CB_POST_ADD', 78004 );class PclZip{var $zipname = '';var $zip_fd = 0;var $error_code = 1;var $error_string = '';var $magic_quotes_status;function PclZip($p_zipname){if (!function_exists('gzopen')){zlog('error')->found('missing.gzopen');die('Abort '.basename(__FILE__).' : Missing zlib extensions');}$this->zipname = $p_zipname;$this->zip_fd = 0;$this->magic_quotes_status = -1;return;}function create($p_filelist){$v_result=1;$this->privErrorReset();$v_options = array();$v_options[PCLZIP_OPT_NO_COMPRESSION] = FALSE;$v_size = func_num_args();if ($v_size > 1) {$v_arg_list = func_get_args();array_shift($v_arg_list);$v_size--;if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) {$v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options,array (PCLZIP_OPT_REMOVE_PATH => 'optional', PCLZIP_OPT_REMOVE_ALL_PATH => 'optional', PCLZIP_OPT_ADD_PATH => 'optional', PCLZIP_CB_PRE_ADD => 'optional', PCLZIP_CB_POST_ADD => 'optional', PCLZIP_OPT_NO_COMPRESSION => 'optional', PCLZIP_OPT_COMMENT => 'optional', PCLZIP_OPT_TEMP_FILE_THRESHOLD => 'optional', PCLZIP_OPT_TEMP_FILE_ON => 'optional', PCLZIP_OPT_TEMP_FILE_OFF => 'optional'));if ($v_result != 1) {return 0;}}else {$v_options[PCLZIP_OPT_ADD_PATH] = $v_arg_list[0];if ($v_size == 2) {$v_options[PCLZIP_OPT_REMOVE_PATH] = $v_arg_list[1];}else if ($v_size > 2) {PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid number / type of arguments");return 0;}}}$this->privOptionDefaultThreshold($v_options);$v_string_list = array();$v_att_list = array();$v_filedescr_list = array();$p_result_list = array();if (is_array($p_filelist)) {if (isset($p_filelist[0]) && is_array($p_filelist[0])) {$v_att_list = $p_filelist;}else {$v_string_list = $p_filelist;}}else if (is_string($p_filelist)) {$v_string_list = explode(PCLZIP_SEPARATOR, $p_filelist);}else {PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type p_filelist");return 0;}if (sizeof($v_string_list) != 0) {foreach ($v_string_list as $v_string) {if ($v_string != '') {$v_att_list[][PCLZIP_ATT_FILE_NAME] = $v_string;}else {}}}$v_supported_attributes= array ( PCLZIP_ATT_FILE_NAME => 'mandatory' ,PCLZIP_ATT_FILE_NEW_SHORT_NAME => 'optional' ,PCLZIP_ATT_FILE_NEW_FULL_NAME => 'optional' ,PCLZIP_ATT_FILE_MTIME => 'optional' ,PCLZIP_ATT_FILE_CONTENT => 'optional' ,PCLZIP_ATT_FILE_COMMENT => 'optional' );foreach ($v_att_list as $v_entry) {$v_result = $this->privFileDescrParseAtt($v_entry, $v_filedescr_list[], $v_options, $v_supported_attributes);if ($v_result != 1) {return 0;}}$v_result = $this->privFileDescrExpand($v_filedescr_list, $v_options);if ($v_result != 1) {return 0;}$v_result = $this->privCreate($v_filedescr_list, $p_result_list, $v_options);if ($v_result != 1) {return 0;}return $p_result_list;}function add($p_filelist){$v_result=1;$this->privErrorReset();$v_options = array();$v_options[PCLZIP_OPT_NO_COMPRESSION] = FALSE;$v_size = func_num_args();if ($v_size > 1) {$v_arg_list = func_get_args();array_shift($v_arg_list);$v_size--;if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) {$v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options,array (PCLZIP_OPT_REMOVE_PATH => 'optional', PCLZIP_OPT_REMOVE_ALL_PATH => 'optional', PCLZIP_OPT_ADD_PATH => 'optional', PCLZIP_CB_PRE_ADD => 'optional', PCLZIP_CB_POST_ADD => 'optional', PCLZIP_OPT_NO_COMPRESSION => 'optional', PCLZIP_OPT_COMMENT => 'optional', PCLZIP_OPT_ADD_COMMENT => 'optional', PCLZIP_OPT_PREPEND_COMMENT => 'optional', PCLZIP_OPT_TEMP_FILE_THRESHOLD => 'optional', PCLZIP_OPT_TEMP_FILE_ON => 'optional', PCLZIP_OPT_TEMP_FILE_OFF => 'optional' ));if ($v_result != 1) {return 0;}}else {$v_options[PCLZIP_OPT_ADD_PATH] = $v_add_path = $v_arg_list[0];if ($v_size == 2) {$v_options[PCLZIP_OPT_REMOVE_PATH] = $v_arg_list[1];}else if ($v_size > 2) {PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid number / type of arguments");return 0;}}}$this->privOptionDefaultThreshold($v_options);$v_string_list = array();$v_att_list = array();$v_filedescr_list = array();$p_result_list = array();if (is_array($p_filelist)) {if (isset($p_filelist[0]) && is_array($p_filelist[0])) {$v_att_list = $p_filelist;}else {$v_string_list = $p_filelist;}}else if (is_string($p_filelist)) {$v_string_list = explode(PCLZIP_SEPARATOR, $p_filelist);}else {PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type '".gettype($p_filelist)."' for p_filelist");return 0;}if (sizeof($v_string_list) != 0) {foreach ($v_string_list as $v_string) {$v_att_list[][PCLZIP_ATT_FILE_NAME] = $v_string;}}$v_supported_attributes= array ( PCLZIP_ATT_FILE_NAME => 'mandatory' ,PCLZIP_ATT_FILE_NEW_SHORT_NAME => 'optional' ,PCLZIP_ATT_FILE_NEW_FULL_NAME => 'optional' ,PCLZIP_AT