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

📄 anzhuang.php

📁 162100 PHP+TXT文本论坛
💻 PHP
字号:
<?php
/*
本程序采自 http://www.softpure.com 纯粹空间,并做了修改
作者:faisun@sina.com
解压缩的结果保留原来的目录结构
转载请注明
*/

$wholedir=substr($_SERVER['SCRIPT_NAME'],1);
$arr_dir=@explode('/',$wholedir);
$dir_num=count($arr_dir);
for($i=0;$i<$dir_num;$i++){
  $the_dir=str_pad('',3*($dir_num-$i-1),'../').$arr_dir[$i];
  @chmod($the_dir,0777);
}
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=gb2312">
<title>安装论坛</title>
<style type="text/css">
<!--
body,td{ font-size:12px;color:#000000;}
-->
</style>
</head>
<body>
<form name="myform" method="post" action="" enctype="multipart/form-data" onSubmit="return check_uploadObject(this);">
<?
if(!$_REQUEST['myaction']):
?>
  <font color="#FF0000">在线解压安装(升级)论坛</font><br><br>
  如果你已经上传forum.zip至你的空间,则在此选择安装包(升级包):forum.zip 
  <select name="zipfile">
    <option value="" selected>- 请选择 -</option>
<?
$fdir=opendir('./');
while($file=readdir($fdir)){
  if(!is_file($file)) continue;
  if(preg_match('/\.zip$/mis',$file)){
    echo '
    <option value="'.$file.'">'.$file.'</option>';
  }
}
?>
  </select><br><br>
  如果你未上传forum.zip至你的空间则从客户端上传安装包(升级包):forum.zip 
  <input name="upfile" type="file" id="upfile" size="20"><br><br>
  解压到目录:
  <input name="todir" type="text" id="todir" value="" size="15"><br>
  (留空即为当前目录。注意目标路径要有写入权限——linux系统下设为0777,window系统下设为web共享。)</td>
  <input name="myaction" type="hidden" id="myaction" value="dounzip"><br><br><br><br>
  <input type="submit" name="Submit" value="★★★★★解压安装★★★★★"><br>

<?

elseif($_REQUEST['myaction']=="dounzip"):
  class zip{
    var $total_files=0;
    var $total_folders=0;

    function Extract($zn,$to,$index=Array(-1)){
      $ok=0;$zip=@fopen($zn,'rb');
      if(!$zip) return(-1);
      $cdir=$this->ReadCentralDir($zip,$zn);
      $pos_entry=$cdir['offset'];

      if(!is_array($index)){ $index=array($index);}
      for($i=0;$index[$i];$i++){
   		if(intval($index[$i])!=$index[$i]||$index[$i]>$cdir['entries'])
		return(-1);
      }
      for($i=0;$i<$cdir['entries'];$i++){
        @fseek($zip,$pos_entry);
        $header=$this->ReadCentralFileHeaders($zip);
        $header['index']=$i;
        $pos_entry=ftell($zip);
        @rewind($zip);
        fseek($zip,$header['offset']);
        if(in_array("-1",$index) || in_array($i,$index))
     	  $stat[$header['filename']]=$this->ExtractFile($header,$to,$zip);
      }
      fclose($zip);
      return $stat;
    }

    function ReadFileHeader($zip){
      $binary_data=fread($zip,30);
      $data=unpack('vchk/vid/vversion/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len',$binary_data);

      $header['filename']=fread($zip,$data['filename_len']);
      if($data['extra_len']!=0){
        $header['extra']=fread($zip,$data['extra_len']);
      }else{
        $header['extra']='';
      }

      $header['compression']=$data['compression'];
      $header['size']=$data['size'];
      $header['compressed_size']=$data['compressed_size'];
      $header['crc']=$data['crc'];
      $header['flag']=$data['flag'];
      $header['mdate']=$data['mdate'];
      $header['mtime']=$data['mtime'];

      if($header['mdate'] && $header['mtime']){
        $hour=($header['mtime']&0xF800)>>11;
        $minute=($header['mtime']&0x07E0)>>5;
        $seconde=($header['mtime']&0x001F)*2;
        $year=(($header['mdate']&0xFE00)>>9)+1980;
        $month=($header['mdate']&0x01E0)>>5;
        $day=$header['mdate']&0x001F;
        $header['mtime']=mktime($hour,$minute,$seconde,$month,$day,$year);
      }else{
        $header['mtime']=time();
      }

      $header['stored_filename']=$header['filename'];
      $header['status']='ok';
      return $header;
    }

    function ReadCentralFileHeaders($zip){
      $binary_data=fread($zip,46);
      $header=unpack('vchkid/vid/vversion/vversion_extracted/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len/vcomment_len/vdisk/vinternal/Vexternal/Voffset',$binary_data);

      if($header['filename_len']!=0)
        $header['filename']=fread($zip,$header['filename_len']);
      else
        $header['filename']='';

      if($header['extra_len']!=0)
        $header['extra']=fread($zip,$header['extra_len']);
      else
        $header['extra']='';

      if($header['comment_len']!=0)
        $header['comment']=fread($zip,$header['comment_len']);
      else
        $header['comment']='';

      if($header['mdate'] && $header['mtime']){
        $hour=($header['mtime'] & 0xF800)>>11;
        $minute=($header['mtime'] & 0x07E0)>>5;
        $seconde=($header['mtime'] & 0x001F)*2;
        $year=(($header['mdate'] & 0xFE00)>>9)+1980;
        $month=($header['mdate'] & 0x01E0)>>5;
        $day=$header['mdate'] & 0x001F;
        $header['mtime']=mktime($hour,$minute,$seconde,$month,$day,$year);
      }else{
        $header['mtime']=time();
      }
      $header['stored_filename']=$header['filename'];
      $header['status']='ok';
      if(substr($header['filename'],-1)=='/')
        $header['external']=0x41FF0010;
      return $header;
    }

    function ReadCentralDir($zip,$zip_name){
	  $size=filesize($zip_name);

	  if($size<277) $maximum_size=$size;
	  else $maximum_size=277;
	
	  @fseek($zip,$size-$maximum_size);
	  $pos=ftell($zip);$bytes=0x00000000;
	
	  while($pos<$size){
        $byte=@fread($zip,1);
        $bytes=($bytes<<8) | ord($byte);
        if($bytes==0x504b0506 or $bytes==0x2e706870504b0506){ $pos++; break; } $pos++;
      }
	
	  $fdata=fread($zip,18);
	
	  $data=@unpack('vdisk/vdisk_start/vdisk_entries/ventries/Vsize/Voffset/vcomment_size',$fdata);
	
	  if($data['comment_size']!=0) $centd['comment']=fread($zip,$data['comment_size']);
	  else $centd['comment']='';$centd['entries']=$data['entries'];
	  $centd['disk_entries']=$data['disk_entries'];
	  $centd['offset']=$data['offset'];$centd['disk_start']=$data['disk_start'];
	  $centd['size']=$data['size']; $centd['disk']=$data['disk'];
	  return $centd;
    }

    function ExtractFile($header,$to,$zip){
	  $header=$this->readfileheader($zip);
	
	  if(substr($to,-1)!="/") $to.="/";
	  if($to=='./') $to='';	
	  $pth=explode("/",$to.$header['filename']);
	  $mydir='';
	  for($i=0;$i<count($pth)-1;$i++){
        if(!$pth[$i]) continue;
        $mydir.=$pth[$i]."/";
        if((!is_dir($mydir) && @mkdir($mydir,0777)) || (($mydir==$to.$header['filename'] || ($mydir==$to && $this->total_folders==0)) && is_dir($mydir)) ){
          @chmod($mydir,0777);
          $this->total_folders++;
          echo '◆目录:'.$mydir.'<br>';
		}
      }
	
	  if(strrchr($header['filename'],'/')=='/') return;	

	  if(!($header['external']==0x41FF0010) && !($header['external']==16)){
        if($header['compression']==0){
          $fp=@fopen($to.$header['filename'],'wb');
          if(!$fp) return(-1);
          $size=$header['compressed_size'];
		
          while($size!=0){
            $read_size=($size<2048 ? $size : 2048);
            $buffer=fread($zip,$read_size);
            $binary_data=pack('a'.$read_size,$buffer);
            @fwrite($fp,$binary_data,$read_size);
            $size-=$read_size;
          }
          fclose($fp);
          touch($to.$header['filename'],$header['mtime']);
        }else{
          $fp=@fopen($to.$header['filename'].'.gz','wb');
          if(!$fp) return(-1);
          $binary_data=pack('va1a1Va1a1',0x8b1f,chr($header['compression']),
          chr(0x00),time(),chr(0x00),chr(3));
			
          fwrite($fp,$binary_data,10);
          $size=$header['compressed_size'];
		
          while($size!=0){
            $read_size=($size<1024 ? $size : 1024);
            $buffer=fread($zip,$read_size);
            $binary_data=pack('a'.$read_size,$buffer);
            @fwrite($fp,$binary_data,$read_size);
            $size-=$read_size;
          }
		
          $binary_data=pack('VV',$header['crc'],$header['size']);
          fwrite($fp,$binary_data,8);fclose($fp);
	
          $gzp=@gzopen($to.$header['filename'].'.gz','rb') or die("Cette archive est compress閑");
          if(!$gzp) return(-2);
          $fp=@fopen($to.$header['filename'],'wb');
          if(!$fp) return(-1);
          $size=$header['size'];
		
          while($size!=0){
            $read_size=($size<2048 ? $size : 2048);
            $buffer=gzread($gzp,$read_size);
            $binary_data=pack('a'.$read_size,$buffer);
            @fwrite($fp,$binary_data,$read_size);
            $size-=$read_size;
          }
          fclose($fp);
          gzclose($gzp);
		
          touch($to.$header['filename'],$header['mtime']);
          @unlink($to.$header['filename'].'.gz');
        }
      }
	
      $this->total_files++;
	  echo '├'.$to.$header['filename'].'<br>';

	  return true;
    } 

// end class
  }

  //set_time_limit(0);

  if(!$_POST['todir']) $_POST['todir']='.';
  $z=new Zip;
  $have_zip_file=0;
  function start_unzip($tmp_name,$new_name,$checked){
    global $_POST,$z,$have_zip_file;
    if(is_file($tmp_name)){
      $have_zip_file=$new_name;
      echo '<br>正在解压:'.$new_name.'<br><br>';
      if(preg_match('/\.zip$/mis',$new_name)){
        $result=$z->extract($tmp_name,$_POST['todir']);
        if($result==-1){
          echo '<br>文件 '.$new_name.' 错误!<br>';
        }
        echo '<br>完成,共建立 '.$z->total_folders.' 个目录,'.$z->total_files.' 个文件。<br><br><a href="index.php"><b>进入论坛</b></a><br><br>';
      }else{
        echo '<br>'.$new_name.' 不是 zip 文件!<br><br>';			
      }
      if(realpath($new_name)!=realpath($tmp_name)){
        @unlink($new_name);
        rename($tmp_name,$new_name);
      }
    }
  }
  clearstatcache();
	
  start_unzip($_POST['zipfile'],$_POST['zipfile'],0);
  start_unzip($_FILES['upfile']['tmp_name'],$_FILES['upfile']['name'],1);

  if(!$have_zip_file){
    echo '<font color="#FF0000">请选择或上传文件!注意目标路径要有写入权限——linux系统下设为0777,window系统下设为web共享。</font><br><br>';
  }
?>
<input name="myaction" type="hidden" id="myaction" value="dodelete">
<input name="dfile" type="hidden" id="dfile" value="<?=$have_zip_file;?>">
<input name="按钮" type="button" value="返回" onClick="window.location='<?=$_SERVER['PHP_SELF'];?>';">
<input type="submit" onClick="return confirm('删除安装包(升级包):文件?');" value="建议:删除安装包(升级包):文件">
<?
elseif($_REQUEST['myaction']=='dodelete'):

  //set_time_limit(0);
  echo '正在删除文件...<br><br>';
  if($dfile=$_POST['dfile']){
    if(@unlink($dfile)){
	  if($fp=@fopen('anzhuang.php','wb')){
        @fwrite($fp,'安装文件已失效');
        @fclose($fp);
      }
      echo '删除安装包(升级包):文件:'.$dfile.' 成功<br>';
    }else{
      echo '删除安装包(升级包):文件:'.$dfile.' 失败<br>';
    }
    echo '<a href="index.php"><b>进入论坛</b></a><br><br>';
  }else{
    echo '未发现安装包(升级包):文件<br>';
  }
  echo '<br>完成!<br><br><input type="button" value="返回" onclick="window.location=\''.$_SERVER['PHP_SELF'].'\';">';

endif;

?>
</form>
</body>
</html>

⌨️ 快捷键说明

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