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

📄 archive_tar.php

📁 Joomla!是一套获得过多个奖项的内容管理系统(Content Management System, CMS)。Joomla!采用PHP+MySQL数据库开发
💻 PHP
📖 第 1 页 / 共 5 页
字号:
            $this->_temp_tarname = '';        }        return true;    }    // }}}    // {{{ _cleanFile()    function _cleanFile()    {        $this->_close();        // ----- Look for a local copy        if ($this->_temp_tarname != '') {            // ----- Remove the local copy but not the remote tarname            @unlink($this->_temp_tarname);            $this->_temp_tarname = '';        } else {            // ----- Remove the local tarname file            @unlink($this->_tarname);        }        $this->_tarname = '';        return true;    }    // }}}    // {{{ _writeBlock()    function _writeBlock($p_binary_data, $p_len=null)    {      if (is_resource($this->_file)) {          if ($p_len === null) {              if ($this->_compress_type == 'gz')                  @gzputs($this->_file, $p_binary_data);              else if ($this->_compress_type == 'bz2')                  @bzwrite($this->_file, $p_binary_data);              else if ($this->_compress_type == 'none')                  @fputs($this->_file, $p_binary_data);              else                  $this->_error('Unknown or missing compression type ('				                .$this->_compress_type.')');          } else {              if ($this->_compress_type == 'gz')                  @gzputs($this->_file, $p_binary_data, $p_len);              else if ($this->_compress_type == 'bz2')                  @bzwrite($this->_file, $p_binary_data, $p_len);              else if ($this->_compress_type == 'none')                  @fputs($this->_file, $p_binary_data, $p_len);              else                  $this->_error('Unknown or missing compression type ('				                .$this->_compress_type.')');          }      }      return true;    }    // }}}    // {{{ _readBlock()    function _readBlock()    {      $v_block = null;      if (is_resource($this->_file)) {          if ($this->_compress_type == 'gz')              $v_block = @gzread($this->_file, 512);          else if ($this->_compress_type == 'bz2')              $v_block = @bzread($this->_file, 512);          else if ($this->_compress_type == 'none')              $v_block = @fread($this->_file, 512);          else              $this->_error('Unknown or missing compression type ('			                .$this->_compress_type.')');      }      return $v_block;    }    // }}}    // {{{ _jumpBlock()    function _jumpBlock($p_len=null)    {      if (is_resource($this->_file)) {          if ($p_len === null)              $p_len = 1;          if ($this->_compress_type == 'gz') {              @gzseek($this->_file, gztell($this->_file)+($p_len*512));          }          else if ($this->_compress_type == 'bz2') {              // ----- Replace missing bztell() and bzseek()              for ($i=0; $i<$p_len; $i++)                  $this->_readBlock();          } else if ($this->_compress_type == 'none')              @fseek($this->_file, ftell($this->_file)+($p_len*512));          else              $this->_error('Unknown or missing compression type ('			                .$this->_compress_type.')');      }      return true;    }    // }}}    // {{{ _writeFooter()    function _writeFooter()    {      if (is_resource($this->_file)) {          // ----- Write the last 0 filled block for end of archive          $v_binary_data = pack('a1024', '');          $this->_writeBlock($v_binary_data);      }      return true;    }    // }}}    // {{{ _addList()    function _addList($p_list, $p_add_dir, $p_remove_dir)    {      $v_result=true;      $v_header = array();      // ----- Remove potential windows directory separator      $p_add_dir = $this->_translateWinPath($p_add_dir);      $p_remove_dir = $this->_translateWinPath($p_remove_dir, false);      if (!$this->_file) {          $this->_error('Invalid file descriptor');          return false;      }      if (sizeof($p_list) == 0)          return true;      foreach ($p_list as $v_filename) {          if (!$v_result) {              break;          }        // ----- Skip the current tar name        if ($v_filename == $this->_tarname)            continue;        if ($v_filename == '')            continue;        if (!file_exists($v_filename)) {            $this->_warning("File '$v_filename' does not exist");            continue;        }        // ----- Add the file or directory header        if (!$this->_addFile($v_filename, $v_header, $p_add_dir, $p_remove_dir))            return false;        if (@is_dir($v_filename) && !@is_link($v_filename)) {            if (!($p_hdir = opendir($v_filename))) {                $this->_warning("Directory '$v_filename' can not be read");                continue;            }            while (false !== ($p_hitem = readdir($p_hdir))) {                if (($p_hitem != '.') && ($p_hitem != '..')) {                    if ($v_filename != ".")                        $p_temp_list[0] = $v_filename.'/'.$p_hitem;                    else                        $p_temp_list[0] = $p_hitem;                    $v_result = $this->_addList($p_temp_list,					                            $p_add_dir,												$p_remove_dir);                }            }            unset($p_temp_list);            unset($p_hdir);            unset($p_hitem);        }      }      return $v_result;    }    // }}}    // {{{ _addFile()    function _addFile($p_filename, &$p_header, $p_add_dir, $p_remove_dir)    {      if (!$this->_file) {          $this->_error('Invalid file descriptor');          return false;      }      if ($p_filename == '') {          $this->_error('Invalid file name');          return false;      }      // ----- Calculate the stored filename      $p_filename = $this->_translateWinPath($p_filename, false);;      $v_stored_filename = $p_filename;      if (strcmp($p_filename, $p_remove_dir) == 0) {          return true;      }      if ($p_remove_dir != '') {          if (substr($p_remove_dir, -1) != '/')              $p_remove_dir .= '/';          if (substr($p_filename, 0, strlen($p_remove_dir)) == $p_remove_dir)              $v_stored_filename = substr($p_filename, strlen($p_remove_dir));      }      $v_stored_filename = $this->_translateWinPath($v_stored_filename);      if ($p_add_dir != '') {          if (substr($p_add_dir, -1) == '/')              $v_stored_filename = $p_add_dir.$v_stored_filename;          else              $v_stored_filename = $p_add_dir.'/'.$v_stored_filename;      }      $v_stored_filename = $this->_pathReduction($v_stored_filename);      if ($this->_isArchive($p_filename)) {          if (($v_file = @fopen($p_filename, "rb")) == 0) {              $this->_warning("Unable to open file '".$p_filename			                  ."' in binary read mode");              return true;          }          if (!$this->_writeHeader($p_filename, $v_stored_filename))              return false;          while (($v_buffer = fread($v_file, 512)) != '') {              $v_binary_data = pack("a512", "$v_buffer");              $this->_writeBlock($v_binary_data);          }          fclose($v_file);      } else {          // ----- Only header for dir          if (!$this->_writeHeader($p_filename, $v_stored_filename))              return false;      }      return true;    }    // }}}    // {{{ _addString()    function _addString($p_filename, $p_string)    {      if (!$this->_file) {          $this->_error('Invalid file descriptor');          return false;      }      if ($p_filename == '') {          $this->_error('Invalid file name');          return false;      }      // ----- Calculate the stored filename      $p_filename = $this->_translateWinPath($p_filename, false);;      if (!$this->_writeHeaderBlock($p_filename, strlen($p_string),	                                  time(), 384, "", 0, 0))          return false;      $i=0;      while (($v_buffer = substr($p_string, (($i++)*512), 512)) != '') {          $v_binary_data = pack("a512", $v_buffer);          $this->_writeBlock($v_binary_data);      }      return true;    }    // }}}    // {{{ _writeHeader()    function _writeHeader($p_filename, $p_stored_filename)    {        if ($p_stored_filename == '')            $p_stored_filename = $p_filename;        $v_reduce_filename = $this->_pathReduction($p_stored_filename);        if (strlen($v_reduce_filename) > 99) {          if (!$this->_writeLongHeader($v_reduce_filename))            return false;        }        $v_info = lstat($p_filename);        $v_uid = sprintf("%6s ", DecOct($v_info[4]));        $v_gid = sprintf("%6s ", DecOct($v_info[5]));        $v_perms = sprintf("%6s ", DecOct($v_info['mode']));        $v_mtime = sprintf("%11s", DecOct($v_info['mode']));        $v_linkname = '';        if (@is_link($p_filename)) {          $v_typeflag = '2';          $v_linkname = readlink($p_filename);          $v_size = sprintf("%11s ", DecOct(0));        } elseif (@is_dir($p_filename)) {          $v_typeflag = "5";          $v_size = sprintf("%11s ", DecOct(0));        } else {          $v_typeflag = '';          clearstatcache();          $v_size = sprintf("%11s ", DecOct($v_info['size']));        }        $v_magic = '';        $v_version = '';        $v_uname = '';        $v_gname = '';        $v_devmajor = '';        $v_devminor = '';        $v_prefix = '';        $v_binary_data_first = pack("a100a8a8a8a12A12",		                            $v_reduce_filename, $v_perms, $v_uid,									$v_gid, $v_size, $v_mtime);        $v_binary_data_last = pack("a1a100a6a2a32a32a8a8a155a12",		                           $v_typeflag, $v_linkname, $v_magic,								   $v_version, $v_uname, $v_gname,								   $v_devmajor, $v_devminor, $v_prefix, '');        // ----- Calculate the checksum        $v_checksum = 0;        // ..... First part of the header        for ($i=0; $i<148; $i++)            $v_checksum += ord(substr($v_binary_data_first,$i,1));        // ..... Ignore the checksum value and replace it by ' ' (space)        for ($i=148; $i<156; $i++)            $v_checksum += ord(' ');        // ..... Last part of the header        for ($i=156, $j=0; $i<512; $i++, $j++)            $v_checksum += ord(substr($v_binary_data_last,$j,1));        // ----- Write the first 148 bytes of the header in the archive        $this->_writeBlock($v_binary_data_first, 148);        // ----- Write the calculated checksum        $v_checksum = sprintf("%6s ", DecOct($v_checksum));        $v_binary_data = pack("a8", $v_checksum);        $this->_writeBlock($v_binary_data, 8);        // ----- Write the last 356 bytes of the header in the archive        $this->_writeBlock($v_binary_data_last, 356);        return true;    }    // }}}    // {{{ _writeHeaderBlock()    function _writeHeaderBlock($p_filename, $p_size, $p_mtime=0, $p_perms=0,	                           $p_type='', $p_uid=0, $p_gid=0)    {        $p_filename = $this->_pathReduction($p_filename);        if (strlen($p_filename) > 99) {          if (!$this->_writeLongHeader($p_filename))            return false;        }        if ($p_type == "5") {          $v_size = sprintf("%11s ", DecOct(0));        } else {

⌨️ 快捷键说明

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