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

📄 archive_tar.php

📁 Joomla!除了具有新闻/文章管理
💻 PHP
📖 第 1 页 / 共 4 页
字号:
			while (false !== ($p_hitem = readdir($p_hdir))) {				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 (is_file($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), 0, 0, "", 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 = stat($p_filename);		$v_uid = sprintf("%6s ", DecOct($v_info[4]));		$v_gid = sprintf("%6s ", DecOct($v_info[5]));		$v_perms = sprintf("%6s ", DecOct(fileperms($p_filename)));		$v_mtime = sprintf("%11s", DecOct(filemtime($p_filename)));		if (@is_dir($p_filename)) {		  $v_typeflag = "5";		  $v_size = sprintf("%11s ", DecOct(0));		} else {		  $v_typeflag = '';		  clearstatcache();		  $v_size = sprintf("%11s ", DecOct(filesize($p_filename)));		}		$v_linkname = '';		$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 {		  $v_size = sprintf("%11s ", DecOct($p_size));		}		$v_uid = sprintf("%6s ", DecOct($p_uid));		$v_gid = sprintf("%6s ", DecOct($p_gid));		$v_perms = sprintf("%6s ", DecOct($p_perms));		$v_mtime = sprintf("%11s", DecOct($p_mtime));		$v_linkname = '';		$v_magic = '';		$v_version = '';		$v_uname = '';		$v_gname = '';		$v_devmajor = '';		$v_devminor = '';		$v_prefix = '';		$v_binary_data_first = pack("a100a8a8a8a12A12", $p_filename, $v_perms, $v_uid, $v_gid, $v_size, $v_mtime);		$v_binary_data_last = pack("a1a100a6a2a32a32a8a8a155a12", $p_type, $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;	}	// }}}	// {{{ _writeLongHeader()	function _writeLongHeader($p_filename)	{		$v_size = sprintf("%11s ", DecOct(strlen($p_filename)));		$v_typeflag = 'L';		$v_linkname = '';		$v_magic = '';		$v_version = '';		$v_uname = '';		$v_gname = '';		$v_devmajor = '';		$v_devminor = '';		$v_prefix = '';		$v_binary_data_first = pack("a100a8a8a8a12A12", '././@LongLink', 0, 0, 0, $v_size, 0);		$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);		// ----- Write the filename as content of the block		$i=0;		while (($v_buffer = substr($p_filename, (($i++)*512), 512)) != '') {			$v_binary_data = pack("a512", "$v_buffer");			$this->_writeBlock($v_binary_data);		}		return true;	}	// }}}	// {{{ _readHeader()	function _readHeader($v_binary_data, &$v_header)	{		if (strlen($v_binary_data)==0) {			$v_header['filename'] = '';			return true;		}		if (strlen($v_binary_data) != 512) {			$v_header['filename'] = '';			$this->_error('Invalid block size : '.strlen($v_binary_data));			return false;		}		// ----- Calculate the checksum		$v_checksum = 0;		// ..... First part of the header		for ($i=0; $i<148; $i++)			$v_checksum+=ord(substr($v_binary_data,$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; $i<512; $i++)			$v_checksum+=ord(substr($v_binary_data,$i,1));		$v_data = unpack("a100filename/a8mode/a8uid/a8gid/a12size/a12mtime/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor", $v_binary_data);		// ----- Extract the checksum		$v_header['checksum'] = OctDec(trim($v_data['checksum']));		if ($v_header['checksum'] != $v_checksum) {			$v_header['filename'] = '';			// ----- Look for last block (empty block)			if (($v_checksum == 256) && ($v_header['checksum'] == 0))				return true;			$this->_error('Invalid checksum for file "'.$v_data['filename'].'" : '.$v_checksum.' calculated, '.$v_header['checksum'].' expected');			return false;		}		// ----- Extract the properties		$v_header['filename'] = trim($v_data['filename']);		$v_header['mode'] = OctDec(trim($v_data['mode']));		$v_header['uid'] = OctDec(trim($v_data['uid']));		$v_header['gid'] = OctDec(trim($v_data['gid']));		$v_header['size'] = OctDec(trim($v_data['size']));		$v_header['mtime'] = OctDec(trim($v_data['mtime']));		if (($v_header['typeflag'] = $v_data['typeflag']) == "5") {		  $v_header['size'] = 0;		}		/* ----- All these fields are removed form the header because they do not carry interesting info		$v_header[link] = trim($v_data[link]);		$v_header[magic] = trim($v_data[magic]);		$v_header[version] = trim($v_data[version]);		$v_header[uname] = trim($v_data[uname]);		$v_header[gname] = trim($v_data[gname]);		$v_header[devmajor] = trim($v_data[devmajor]);		$v_header[devminor] = trim($v_data[devminor]);		*/		return true;	}	// }}}	// {{{ _readLongHeader()	function _readLongHeader(&$v_header)	{	  $v_filename = '';	  $n = floor($v_header['size']/512);	  for ($i=0; $i<$n; $i++) {		$v_content = $this->_readBlock();		$v_filename .= $v_content;	  }	  if (($v_header['size'] % 512) != 0) {		$v_content = $this->_readBlock();		$v_filename .= $v_content;	  }	  // ----- Read the next header	  $v_binary_data = $this->_readBlock();	  if (!$this->_readHeader($v_binary_data, $v_header))		return false;	  $v_header['filename'] = $v_filename;	  return true;	}	// }}}	// {{{ _extractInString()	/**	* This method extract from the archive one file identified by $p_filename.	* The return value is a string with the file content, or NULL on error.	* @param string $p_filename	 The path of the file to extract in a string.	* @return						a string with the file content or NULL.	* @access private	*/	function _extractInString($p_filename)	{		$v_result_str = "";		$v_header = array();		While (strlen($v_binary_data = $this->_readBlock()) != 0)

⌨️ 快捷键说明

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