⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pclzip.lib.php

📁 mambo的cms源代码
💻 PHP
📖 第 1 页 / 共 5 页
字号:
<?php/*** @version $Id: pclzip.lib.php,v 1.3 2004/12/24 03:26:24 eddieajau Exp $* @package Mambo*//** ensure this file is being included by a parent file */defined( '_VALID_MOS' ) or die( 'Direct Access to this location is not allowed.' );// --------------------------------------------------------------------------------// PhpConcept Library - Zip Module 2.1// --------------------------------------------------------------------------------// License GNU/LGPL - Vincent Blavet - December 2003// http://www.phpconcept.net// --------------------------------------------------------------------------------//// Presentation ://   PclZip is a PHP library that manage ZIP archives.//   So far tests show that archives generated by PclZip are readable by//   WinZip application and other tools.//// Description ://   See readme.txt and http://www.phpconcept.net//// Warning ://   This library and the associated files are non commercial, non professional//   work.//   It should not have unexpected results. However if any damage is caused by//   this software the author can not be responsible.//   The use of this software is at the risk of the user.//// --------------------------------------------------------------------------------// $Id: pclzip.lib.php,v 1.3 2004/12/24 03:26:24 eddieajau Exp $// --------------------------------------------------------------------------------  // ----- Constants  define( 'PCLZIP_READ_BLOCK_SIZE', 2048 );    // ----- File list separator  // In version 1.x of PclZip, the separator for file list is a space  // (which is not a very smart choice, specifically for windows paths !).  // A better separator should be a comma (,). This constant gives you the  // abilty to change that.  // However notice that changing this value, may have impact on existing  // scripts, using space separated filenames.  // Recommanded values for compatibility with older versions :  //define( 'PCLZIP_SEPARATOR', ' ' );  // Recommanded values for smart separation of filenames.  define( 'PCLZIP_SEPARATOR', ',' );  // ----- Error configuration  // 0 : PclZip Class integrated error handling  // 1 : PclError external library error handling. By enabling this  //     you must ensure that you have included PclError library.  // [2,...] : reserved for futur use  define( 'PCLZIP_ERROR_EXTERNAL', 0 );  // ----- Optional static temporary directory  //       By default temporary files are generated in the script current  //       path.  //       If defined :  //       - MUST BE terminated by a '/'.  //       - MUST be a valid, already created directory  //       Samples :  // define( 'PCLZIP_TEMPORARY_DIR', '/temp/' );  // define( 'PCLZIP_TEMPORARY_DIR', 'C:/Temp/' );  define( 'PCLZIP_TEMPORARY_DIR', '' );// --------------------------------------------------------------------------------// ***** UNDER THIS LINE NOTHING NEEDS TO BE MODIFIED *****// --------------------------------------------------------------------------------  // ----- Global variables  $g_pclzip_version = "2.1";  // ----- Error codes  //   -1 : Unable to open file in binary write mode  //   -2 : Unable to open file in binary read mode  //   -3 : Invalid parameters  //   -4 : File does not exist  //   -5 : Filename is too long (max. 255)  //   -6 : Not a valid zip file  //   -7 : Invalid extracted file size  //   -8 : Unable to create directory  //   -9 : Invalid archive extension  //  -10 : Invalid archive format  //  -11 : Unable to delete file (unlink)  //  -12 : Unable to rename file (rename)  //  -13 : Invalid header checksum  //  -14 : Invalid archive size  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 );  // ----- Options values  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 );  // ----- Call backs values  define( 'PCLZIP_CB_PRE_EXTRACT', 78001 );  define( 'PCLZIP_CB_POST_EXTRACT', 78002 );  define( 'PCLZIP_CB_PRE_ADD', 78003 );  define( 'PCLZIP_CB_POST_ADD', 78004 );  /* For futur use  define( 'PCLZIP_CB_PRE_LIST', 78005 );  define( 'PCLZIP_CB_POST_LIST', 78006 );  define( 'PCLZIP_CB_PRE_DELETE', 78007 );  define( 'PCLZIP_CB_POST_DELETE', 78008 );  */  // --------------------------------------------------------------------------------  // Class : PclZip  // Description :  //   PclZip is the class that represent a Zip archive.  //   The public methods allow the manipulation of the archive.  // Attributes :  //   Attributes must not be accessed directly.  // Methods :  //   PclZip() : Object creator  //   create() : Creates the Zip archive  //   listContent() : List the content of the Zip archive  //   extract() : Extract the content of the archive  //   properties() : List the properties of the archive  // --------------------------------------------------------------------------------  class PclZip  {    // ----- Filename of the zip file    var $zipname = '';    // ----- File descriptor of the zip file    var $zip_fd = 0;    // ----- Internal error handling    var $error_code = 1;    var $error_string = '';  // --------------------------------------------------------------------------------  // Function : PclZip()  // Description :  //   Creates a PclZip object and set the name of the associated Zip archive  //   filename.  //   Note that no real action is taken, if the archive does not exist it is not  //   created. Use create() for that.  // --------------------------------------------------------------------------------  function PclZip($p_zipname)  {    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::PclZip', "zipname=$p_zipname");    // ----- Tests the zlib    if (!function_exists('gzopen'))    {      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 1, "zlib extension seems to be missing");      die('Abort '.basename(__FILE__).' : Missing zlib extensions');    }    // ----- Set the attributes    $this->zipname = $p_zipname;    $this->zip_fd = 0;    // ----- Return    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 1);    return;  }  // --------------------------------------------------------------------------------  // --------------------------------------------------------------------------------  // Function :  //   create($p_filelist, $p_add_dir="", $p_remove_dir="")  //   create($p_filelist, $p_option, $p_option_value, ...)  // Description :  //   This method supports two different synopsis. The first one is historical.  //   This method creates a Zip Archive. The Zip file is created in the  //   filesystem. The files and directories indicated in $p_filelist  //   are added in the archive. See the parameters description for the  //   supported format of $p_filelist.  //   When a directory is in the list, the directory and its content is added  //   in the archive.  //   In this synopsis, the function takes an optional variable list of  //   options. See bellow the supported options.  // Parameters :  //   $p_filelist : An array containing file or directory names, or  //                 a string containing one filename or one directory name, or  //                 a string containing a list of filenames and/or directory  //                 names separated by spaces.  //   $p_add_dir : A path to add before the real path of the archived file,  //                in order to have it memorized in the archive.  //   $p_remove_dir : A path to remove from the real path of the file to archive,  //                   in order to have a shorter path memorized in the archive.  //                   When $p_add_dir and $p_remove_dir are set, $p_remove_dir  //                   is removed first, before $p_add_dir is added.  // Options :  //   PCLZIP_OPT_ADD_PATH :  //   PCLZIP_OPT_REMOVE_PATH :  //   PCLZIP_OPT_REMOVE_ALL_PATH :  //   PCLZIP_OPT_COMMENT :  //   PCLZIP_CB_PRE_ADD :  //   PCLZIP_CB_POST_ADD :  // Return Values :  //   0 on failure,  //   The list of the added files, with a status of the add action.  //   (see PclZip::listContent() for list entry format)  // --------------------------------------------------------------------------------//  function create($p_filelist, $p_add_dir="", $p_remove_dir="")  function create($p_filelist /*, options */)  {    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::create', "filelist='$p_filelist', ...");    $v_result=1;    // ----- Reset the error handler    $this->privErrorReset();    // ----- Set default values    $v_options = array();    $v_add_path = "";    $v_remove_path = "";    $v_remove_all_path = false;    $v_options[PCLZIP_OPT_NO_COMPRESSION] = FALSE;    // ----- Look for variable options arguments    $v_size = func_num_args();    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "$v_size arguments passed to the method");    // ----- Look for arguments    if ($v_size > 1) {      // ----- Get the arguments      $v_arg_list = &func_get_args();      // ----- Remove form the options list the first argument      array_shift($v_arg_list);      $v_size--;      // ----- Look for first arg      if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) {        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Variable list of options detected");        // ----- Parse the options        $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' ));        if ($v_result != 1) {          //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);          return 0;        }        // ----- Set the arguments        if (isset($v_options[PCLZIP_OPT_ADD_PATH])) {          $v_add_path = $v_options[PCLZIP_OPT_ADD_PATH];        }        if (isset($v_options[PCLZIP_OPT_REMOVE_PATH])) {          $v_remove_path = $v_options[PCLZIP_OPT_REMOVE_PATH];        }        if (isset($v_options[PCLZIP_OPT_REMOVE_ALL_PATH])) {          $v_remove_all_path = $v_options[PCLZIP_OPT_REMOVE_ALL_PATH];        }      }      // ----- Look for 2 args      // Here we need to support the first historic synopsis of the      // method.      else {        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Static synopsis");        // ----- Get the first argument        $v_add_path = $v_arg_list[0];        // ----- Look for the optional second argument        if ($v_size == 2) {          $v_remove_path = $v_arg_list[1];        }        else if ($v_size > 2) {          // ----- Error log          PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER,		                       "Invalid number / type of arguments");          // ----- Return          //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());          return 0;        }      }    }    // ----- Trace    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "add_path='$v_add_path', remove_path='$v_remove_path', remove_all_path='".($v_remove_all_path?'true':'false')."'");    // ----- Look if the $p_filelist is really an array

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -