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

📄 pclzip.lib.php

📁 Joomla!是一套获得过多个奖项的内容管理系统(Content Management System, CMS)。Joomla!采用PHP+MySQL数据库开发
💻 PHP
📖 第 1 页 / 共 5 页
字号:
// ----- Look for options that takes a stringcase PCLZIP_OPT_COMMENT :case PCLZIP_OPT_ADD_COMMENT :case PCLZIP_OPT_PREPEND_COMMENT :  // ----- Check the number of parameters  if (($i+1) >= $p_size) {// ----- Error logPclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE,			 "Missing parameter value for option '"								 .PclZipUtilOptionText($p_options_list[$i])								 ."'");// ----- Return//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());return PclZip::errorCode();  }  // ----- Get the value  if (is_string($p_options_list[$i+1])) {  $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1];  }  else {// ----- Error logPclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE,			 "Wrong parameter value for option '"								 .PclZipUtilOptionText($p_options_list[$i])								 ."'");// ----- Return//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());return PclZip::errorCode();  }  //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "".PclZipUtilOptionText($p_options_list[$i])." = '".$v_result_list[$p_options_list[$i]]."'");  $i++;break;// ----- Look for options that request an array of indexcase PCLZIP_OPT_BY_INDEX :  // ----- Check the number of parameters  if (($i+1) >= $p_size) {// ----- Error logPclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");// ----- Return//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());return PclZip::errorCode();  }  // ----- Get the value  $v_work_list = array();  if (is_string($p_options_list[$i+1])) {  //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Index value is a string '".$p_options_list[$i+1]."'");  // ----- Remove spaces  $p_options_list[$i+1] = strtr($p_options_list[$i+1], ' ', '');  // ----- Parse items  $v_work_list = explode(",", $p_options_list[$i+1]);  }  else if (is_integer($p_options_list[$i+1])) {  //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Index value is an integer '".$p_options_list[$i+1]."'");  $v_work_list[0] = $p_options_list[$i+1].'-'.$p_options_list[$i+1];  }  else if (is_array($p_options_list[$i+1])) {  //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Index value is an array");  $v_work_list = $p_options_list[$i+1];  }  else {// ----- Error logPclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Value must be integer, string or array for option '".PclZipUtilOptionText($p_options_list[$i])."'");// ----- Return//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());return PclZip::errorCode();  }  // ----- Reduce the index list  // each index item in the list must be a couple with a start and  // an end value : [0,3], [5-5], [8-10], ...  // ----- Check the format of each item  $v_sort_flag=false;  $v_sort_value=0;  for ($j=0; $j<sizeof($v_work_list); $j++) {  // ----- Explode the item  $v_item_list = explode("-", $v_work_list[$j]);  $v_size_item_list = sizeof($v_item_list);  // ----- TBC : Here we might check that each item is a  // real integer ...  // ----- Look for single value  if ($v_size_item_list == 1) {  // ----- Set the option value  $v_result_list[$p_options_list[$i]][$j]['start'] = $v_item_list[0];  $v_result_list[$p_options_list[$i]][$j]['end'] = $v_item_list[0];  }  elseif ($v_size_item_list == 2) {  // ----- Set the option value  $v_result_list[$p_options_list[$i]][$j]['start'] = $v_item_list[0];  $v_result_list[$p_options_list[$i]][$j]['end'] = $v_item_list[1];  }  else {  // ----- Error log  PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Too many values in index range for option '".PclZipUtilOptionText($p_options_list[$i])."'");  // ----- Return  //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());  return PclZip::errorCode();  }  //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Extracted index item = [".$v_result_list[$p_options_list[$i]][$j]['start'].",".$v_result_list[$p_options_list[$i]][$j]['end']."]");  // ----- Look for list sort  if ($v_result_list[$p_options_list[$i]][$j]['start'] < $v_sort_value) {  //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "The list should be sorted ...");  $v_sort_flag=true;  // ----- TBC : An automatic sort should be writen ...  // ----- Error log  PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Invalid order of index range for option '".PclZipUtilOptionText($p_options_list[$i])."'");  // ----- Return  //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());  return PclZip::errorCode();  }  $v_sort_value = $v_result_list[$p_options_list[$i]][$j]['start'];  }  // ----- Sort the items  if ($v_sort_flag) {  // TBC : To Be Completed  //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "List sorting is not yet write ...");  }  // ----- Next option  $i++;break;// ----- Look for options that request no valuecase PCLZIP_OPT_REMOVE_ALL_PATH :case PCLZIP_OPT_EXTRACT_AS_STRING :case PCLZIP_OPT_NO_COMPRESSION :case PCLZIP_OPT_EXTRACT_IN_OUTPUT :  $v_result_list[$p_options_list[$i]] = true;  //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "".PclZipUtilOptionText($p_options_list[$i])." = '".$v_result_list[$p_options_list[$i]]."'");break;// ----- Look for options that request an octal valuecase PCLZIP_OPT_SET_CHMOD :  // ----- Check the number of parameters  if (($i+1) >= $p_size) {// ----- Error logPclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");// ----- Return//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());return PclZip::errorCode();  }  // ----- Get the value  $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1];  //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "".PclZipUtilOptionText($p_options_list[$i])." = '".$v_result_list[$p_options_list[$i]]."'");  $i++;break;// ----- Look for options that request a call-backcase PCLZIP_CB_PRE_EXTRACT :case PCLZIP_CB_POST_EXTRACT :case PCLZIP_CB_PRE_ADD :case PCLZIP_CB_POST_ADD :/* for futur usecase PCLZIP_CB_PRE_DELETE :case PCLZIP_CB_POST_DELETE :case PCLZIP_CB_PRE_LIST :case PCLZIP_CB_POST_LIST :*/  // ----- Check the number of parameters  if (($i+1) >= $p_size) {// ----- Error logPclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");// ----- Return//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());return PclZip::errorCode();  }  // ----- Get the value  $v_function_name = $p_options_list[$i+1];  //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "call-back ".PclZipUtilOptionText($p_options_list[$i])." = '".$v_function_name."'");  // ----- Check that the value is a valid existing function  if (!function_exists($v_function_name)) {// ----- Error logPclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Function '".$v_function_name."()' is not an existing function for option '".PclZipUtilOptionText($p_options_list[$i])."'");// ----- Return//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());return PclZip::errorCode();  }  // ----- Set the attribute  $v_result_list[$p_options_list[$i]] = $v_function_name;  $i++;break;default :  // ----- Error log  PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER,			"Unknown parameter '"								.$p_options_list[$i]."'");  // ----- Return  //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());  return PclZip::errorCode();  }  // ----- Next options  $i++;}// ----- Look for mandatory optionsif ($v_requested_options !== false) {  for ($key=reset($v_requested_options); $key=key($v_requested_options); $key=next($v_requested_options)) {// ----- Look for mandatory optionif ($v_requested_options[$key] == 'mandatory') {  //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Detect a mandatory option : ".PclZipUtilOptionText($key)."(".$key.")");  // ----- Look if present  if (!isset($v_result_list[$key])) {// ----- Error logPclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Missing mandatory parameter ".PclZipUtilOptionText($key)."(".$key.")");// ----- Return//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());return PclZip::errorCode();  }}  }}// ----- Return//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);return $v_result;  }  // --------------------------------------------------------------------------------  // --------------------------------------------------------------------------------  // Function : privCreate()  // Description :  // Parameters :  // Return Values :  // --------------------------------------------------------------------------------  function privCreate($p_list, &$p_result_list, $p_add_dir, $p_remove_dir, $p_remove_all_dir, &$p_options)  {//--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privCreate", "list, result_list, add_dir='$p_add_dir', remove_dir='$p_remove_dir'");$v_result=1;$v_list_detail = array();// ----- Open the file in write modeif (($v_result = $this->privOpenFd('wb')) != 1){  // ----- Return  //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);  return $v_result;}// ----- Add the list of files$v_result = $this->privAddList($p_list, $p_result_list, $p_add_dir, $p_remove_dir, $p_remove_all_dir, $p_options);// ----- Close$this->privCloseFd();// ----- Return//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);return $v_result;  }  // --------------------------------------------------------------------------------  // --------------------------------------------------------------------------------  // Function : privAdd()  // Description :  // Parameters :  // Return Values :  // --------------------------------------------------------------------------------  function privAdd($p_list, &$p_result_list, $p_add_dir, $p_remove_dir, $p_remove_all_dir, &$p_options)  {//--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privAdd", "list, result_list, add_dir='$p_add_dir', remove_dir='$p_remove_dir'");$v_result=1;$v_list_detail = array();// ----- Look if the archive exists or is emptyif ((!is_file($this->zipname)) || (filesize($this->zipname) == 0)){  //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Archive does not exist, or is empty, create it.");  // ----- Do a create  $v_result = $this->privCreate($p_list, $p_result_list, $p_add_dir, $p_remove_dir, $p_remove_all_dir, $p_options);  // ----- Return  //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);  return $v_result;}// ----- Open the zip file//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Open file in binary read mode");if (($v_result=$this->privOpenFd('rb')) != 1){  // ----- Return  //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);  return $v_result;}// ----- Read the central directory informations$v_central_dir = array();if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1){  $this->privCloseFd();  //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);  return $v_result;}// ----- Go to beginning of File//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position in file : ".ftell($this->zip_fd)."'");@rewind($this->zip_fd);//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position in file : ".ftell($this->zip_fd)."'");// ----- Creates a temporay file$v_zip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.tmp';// ----- Open the temporary file in write mode//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Open file in binary read mode");if (($v_zip_temp_fd = @fopen($v_zip_temp_name, 'wb')) == 0){  $this->privCloseFd();  PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \''.$v_zip_temp_name.'\' in binary write mode');  // ----- Return  //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());  return PclZip::errorCode();}// ----- Copy the files from the archive to the temporary file// TBC : Here I should better append the file and go back to erase the central dir$v_size = $v_central_dir['offset'];while ($v_size != 0){  $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);  //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Read $v_read_size bytes");  $v_buffer = fread($this->zip_fd, $v_read_size);  @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size);  $v_size -= $v_read_size;}// ----- Swap the file descriptor// Here is a trick : I swap the temporary fd with the zip fd, in order to use// the following methods on the temporary fil and not the real archive$v_swap = $this->zip_fd;$this->zip_fd = $v_zip_temp_fd;$v_zip_temp_fd = $v_swap;// ----- Add the files$v_header_list = array();i

⌨️ 快捷键说明

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