WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru
функция не описана

PclZip::privDeleteByRule() public WP 1.0

Function : privDeleteByRule() Description : Parameters : Return Values :

Это метод класса: PclZip{}

Хуков нет.

Возвращает

Null. Ничего.

Использование

$PclZip = new PclZip();
$PclZip->privDeleteByRule( $p_result_list, $p_options );

Код PclZip::privDeleteByRule() WP 5.5.1

wp-admin/includes/class-pclzip.php
<?php
function privDeleteByRule(&$p_result_list, &$p_options)
{
  $v_result=1;
  $v_list_detail = array();

  // ----- Open the zip file
  if (($v_result=$this->privOpenFd('rb')) != 1)
  {
    // ----- Return
    return $v_result;
  }

  // ----- Read the central directory information
  $v_central_dir = array();
  if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1)
  {
    $this->privCloseFd();
    return $v_result;
  }

  // ----- Go to beginning of File
  @rewind($this->zip_fd);

  // ----- Scan all the files
  // ----- Start at beginning of Central Dir
  $v_pos_entry = $v_central_dir['offset'];
  @rewind($this->zip_fd);
  if (@fseek($this->zip_fd, $v_pos_entry))
  {
    // ----- Close the zip file
    $this->privCloseFd();

    // ----- Error log
    PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size');

    // ----- Return
    return PclZip::errorCode();
  }

  // ----- Read each entry
  $v_header_list = array();
  $j_start = 0;
  for ($i=0, $v_nb_extracted=0; $i<$v_central_dir['entries']; $i++)
  {

    // ----- Read the file header
    $v_header_list[$v_nb_extracted] = array();
    if (($v_result = $this->privReadCentralFileHeader($v_header_list[$v_nb_extracted])) != 1)
    {
      // ----- Close the zip file
      $this->privCloseFd();

      return $v_result;
    }


    // ----- Store the index
    $v_header_list[$v_nb_extracted]['index'] = $i;

    // ----- Look for the specific extract rules
    $v_found = false;

    // ----- Look for extract by name rule
    if (   (isset($p_options[PCLZIP_OPT_BY_NAME]))
        && ($p_options[PCLZIP_OPT_BY_NAME] != 0)) {

        // ----- Look if the filename is in the list
        for ($j=0; ($j<sizeof($p_options[PCLZIP_OPT_BY_NAME])) && (!$v_found); $j++) {

            // ----- Look for a directory
            if (substr($p_options[PCLZIP_OPT_BY_NAME][$j], -1) == "/") {

                // ----- Look if the directory is in the filename path
                if (   (strlen($v_header_list[$v_nb_extracted]['stored_filename']) > strlen($p_options[PCLZIP_OPT_BY_NAME][$j]))
                    && (substr($v_header_list[$v_nb_extracted]['stored_filename'], 0, strlen($p_options[PCLZIP_OPT_BY_NAME][$j])) == $p_options[PCLZIP_OPT_BY_NAME][$j])) {
                    $v_found = true;
                }
                elseif (   (($v_header_list[$v_nb_extracted]['external']&0x00000010)==0x00000010) /* Indicates a folder */
                        && ($v_header_list[$v_nb_extracted]['stored_filename'].'/' == $p_options[PCLZIP_OPT_BY_NAME][$j])) {
                    $v_found = true;
                }
            }
            // ----- Look for a filename
            elseif ($v_header_list[$v_nb_extracted]['stored_filename'] == $p_options[PCLZIP_OPT_BY_NAME][$j]) {
                $v_found = true;
            }
        }
    }

    // ----- Look for extract by ereg rule
    // ereg() is deprecated with PHP 5.3
    /*
    else if (   (isset($p_options[PCLZIP_OPT_BY_EREG]))
             && ($p_options[PCLZIP_OPT_BY_EREG] != "")) {

        if (ereg($p_options[PCLZIP_OPT_BY_EREG], $v_header_list[$v_nb_extracted]['stored_filename'])) {
            $v_found = true;
        }
    }
    */

    // ----- Look for extract by preg rule
    else if (   (isset($p_options[PCLZIP_OPT_BY_PREG]))
             && ($p_options[PCLZIP_OPT_BY_PREG] != "")) {

        if (preg_match($p_options[PCLZIP_OPT_BY_PREG], $v_header_list[$v_nb_extracted]['stored_filename'])) {
            $v_found = true;
        }
    }

    // ----- Look for extract by index rule
    else if (   (isset($p_options[PCLZIP_OPT_BY_INDEX]))
             && ($p_options[PCLZIP_OPT_BY_INDEX] != 0)) {

        // ----- Look if the index is in the list
        for ($j=$j_start; ($j<sizeof($p_options[PCLZIP_OPT_BY_INDEX])) && (!$v_found); $j++) {

            if (($i>=$p_options[PCLZIP_OPT_BY_INDEX][$j]['start']) && ($i<=$p_options[PCLZIP_OPT_BY_INDEX][$j]['end'])) {
                $v_found = true;
            }
            if ($i>=$p_options[PCLZIP_OPT_BY_INDEX][$j]['end']) {
                $j_start = $j+1;
            }

            if ($p_options[PCLZIP_OPT_BY_INDEX][$j]['start']>$i) {
                break;
            }
        }
    }
    else {
    	$v_found = true;
    }

    // ----- Look for deletion
    if ($v_found)
    {
      unset($v_header_list[$v_nb_extracted]);
    }
    else
    {
      $v_nb_extracted++;
    }
  }

  // ----- Look if something need to be deleted
  if ($v_nb_extracted > 0) {

      // ----- Creates a temporary file
      $v_zip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.tmp';

      // ----- Creates a temporary zip archive
      $v_temp_zip = new PclZip($v_zip_temp_name);

      // ----- Open the temporary zip file in write mode
      if (($v_result = $v_temp_zip->privOpenFd('wb')) != 1) {
          $this->privCloseFd();

          // ----- Return
          return $v_result;
      }

      // ----- Look which file need to be kept
      for ($i=0; $i<sizeof($v_header_list); $i++) {

          // ----- Calculate the position of the header
          @rewind($this->zip_fd);
          if (@fseek($this->zip_fd,  $v_header_list[$i]['offset'])) {
              // ----- Close the zip file
              $this->privCloseFd();
              $v_temp_zip->privCloseFd();
              @unlink($v_zip_temp_name);

              // ----- Error log
              PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size');

              // ----- Return
              return PclZip::errorCode();
          }

          // ----- Read the file header
          $v_local_header = array();
          if (($v_result = $this->privReadFileHeader($v_local_header)) != 1) {
              // ----- Close the zip file
              $this->privCloseFd();
              $v_temp_zip->privCloseFd();
              @unlink($v_zip_temp_name);

              // ----- Return
              return $v_result;
          }

          // ----- Check that local file header is same as central file header
          if ($this->privCheckFileHeaders($v_local_header,
			                                $v_header_list[$i]) != 1) {
              // TBC
          }
          unset($v_local_header);

          // ----- Write the file header
          if (($v_result = $v_temp_zip->privWriteFileHeader($v_header_list[$i])) != 1) {
              // ----- Close the zip file
              $this->privCloseFd();
              $v_temp_zip->privCloseFd();
              @unlink($v_zip_temp_name);

              // ----- Return
              return $v_result;
          }

          // ----- Read/write the data block
          if (($v_result = PclZipUtilCopyBlock($this->zip_fd, $v_temp_zip->zip_fd, $v_header_list[$i]['compressed_size'])) != 1) {
              // ----- Close the zip file
              $this->privCloseFd();
              $v_temp_zip->privCloseFd();
              @unlink($v_zip_temp_name);

              // ----- Return
              return $v_result;
          }
      }

      // ----- Store the offset of the central dir
      $v_offset = @ftell($v_temp_zip->zip_fd);

      // ----- Re-Create the Central Dir files header
      for ($i=0; $i<sizeof($v_header_list); $i++) {
          // ----- Create the file header
          if (($v_result = $v_temp_zip->privWriteCentralFileHeader($v_header_list[$i])) != 1) {
              $v_temp_zip->privCloseFd();
              $this->privCloseFd();
              @unlink($v_zip_temp_name);

              // ----- Return
              return $v_result;
          }

          // ----- Transform the header to a 'usable' info
          $v_temp_zip->privConvertHeader2FileInfo($v_header_list[$i], $p_result_list[$i]);
      }


      // ----- Zip file comment
      $v_comment = '';
      if (isset($p_options[PCLZIP_OPT_COMMENT])) {
        $v_comment = $p_options[PCLZIP_OPT_COMMENT];
      }

      // ----- Calculate the size of the central header
      $v_size = @ftell($v_temp_zip->zip_fd)-$v_offset;

      // ----- Create the central dir footer
      if (($v_result = $v_temp_zip->privWriteCentralHeader(sizeof($v_header_list), $v_size, $v_offset, $v_comment)) != 1) {
          // ----- Reset the file list
          unset($v_header_list);
          $v_temp_zip->privCloseFd();
          $this->privCloseFd();
          @unlink($v_zip_temp_name);

          // ----- Return
          return $v_result;
      }

      // ----- Close
      $v_temp_zip->privCloseFd();
      $this->privCloseFd();

      // ----- Delete the zip file
      // TBC : I should test the result ...
      @unlink($this->zipname);

      // ----- Rename the temporary file
      // TBC : I should test the result ...
      //@rename($v_zip_temp_name, $this->zipname);
      PclZipUtilRename($v_zip_temp_name, $this->zipname);

      // ----- Destroy the temporary archive
      unset($v_temp_zip);
  }

  // ----- Remove every files : reset the file
  else if ($v_central_dir['entries'] != 0) {
      $this->privCloseFd();

      if (($v_result = $this->privOpenFd('wb')) != 1) {
        return $v_result;
      }

      if (($v_result = $this->privWriteCentralHeader(0, 0, 0, '')) != 1) {
        return $v_result;
      }

      $this->privCloseFd();
  }

  // ----- Return
  return $v_result;
}