?//재URL后参加 ?pwd=密码 查看生成密码$password = '8baa717e6265d1c1d762cc896151f821'; //l23?> < 메타 http-equiv="Content-Type" content="text/html; charset=utf-8" /> php ZIP压缩程序 在线压缩ZIP文件程序 이용 방법:选定要压缩的文件或目录(包含子目录),即可开始压缩。 echo '当前目录:'. dirname(__FILE__) . ' 退出'; else if(isset($_GET['pwd']) ) echo '密码值:'. md5($_GET['pwd']) . ''; else echo 'Tips:在URL后参加?pwd=密码 查看生成密码.'; ?> if(!isset($_REQUEST["myaction"])):?> 验证密码: document.getElementById('password').focus (); elseif($_REQUEST["myaction"]=="dolist"): if(!isset( $_REQUEST['pwd']) || 비어 있음($_REQUEST['pwd']) ) die('请输入密码! '); if(md5($_REQUEST['pwd']) != $password) die('输入的密码不正确!다시'); echo '제외할 디렉터리를 선택하세요(상대 경로, 쉼표로 구분):< ; br />'; echo ''; echo " 압축할 파일이나 디렉터리를 선택하세요:"; $fdir = opendir('./'); while($file=readdir($fdir)){ if ( $file=='.'|| $file=='..' ) 계속; echo "<입력 이름='dfile[]' type='checkbox' value='$file' ".( $ file==basename(__FILE__)?"":"checked")."> "; if(is_file($file)){ echo "파일: $file"; }else{ echo "디렉토리: $file"; } } ?> 압축 파일을 다음 디렉터리에 저장하세요. (이 디렉터리는 비워두세요. 쓰기 권한이 있어야 합니다.) 압축된 파일 이름: (.zip) <스크립트 언어= ' javascript'> function selrev() { with(document.getElementById('myform')){ for(i=0;i thiselm = 요소[i]; if(thiselm.name.match(/dfile[]/)) thiselm.checked = !thiselm.checked; } }}< / script> elseif($_REQUEST["myaction"]=="dozip"):// set_time_limit(0); class PHPzip{ var $file_count = 0; var $datastr_len = 0; var $dirstr_len = 0; var $filedata = ''; 클래스 외부 프로그램 액세스 var $gzfilename; var $fp; var $dirstr=''; /* 파일의 수정 시간 형식을 반환합니다.는 이 클래스의 내부 함수만 Call. */ function unix2DosTime($unixtime = 0) { $timearray = ($unixtime == 0) ? getdate() : getdate($unixtime); if ($timearray['연도'] < 1980) { $timearray['연도'] = 1980; $timearray['mon'] = 1; $ timearray['mday'] = 1; $timearray['hours'] = 0; $timearray['분'] = 0; $timearray['seconds'] = 0; } return (($timearray['연도'] - 1980) << 25) | ($timearray['mon'] << 21) ($timearray['mday' ] << 16) | ($timearray['시간'] << 11) ($timearray['분'] << 5) | ;> 1); } /* 파일을 초기화하고, 파일 디렉터리를 생성하고, 파일의 쓰기 권한을 반환합니다. */ function startfile($path = 'myzip.zip '){ $this->gzfilename=$path; $mypathdir=array(); do{ $mypathdir[] = $ path = dirname($path); }while($path != '.'); @end($mypathdir); do{ $path = @current($mypathdir) ; @mkdir($path) ; }while(@prev($mypathdir)); if($this->fp=@fopen($this->gzfilename, "w")){ true 반환; } false 반환; } /* zip 아카이브에 파일을 추가합니다. */ function addfile($data, $name){ $name = str_replace('\', ' /', $name); if(strrchr($name,'/')=='/') return $this->adddir($name); $ dtime = decex($this->unix2DosTime()); $hexdtime = 'x' . $dtime[7] $dtime[4] . [5] . $dtime[2] . 'x' . $dtime[1]; eval('$ hexdtime = "' . $hexdtime . '";'); $unc_len = strlen($data); $crc = crc32($data); $zdata = gzcompress($ data ); $c_len = strlen($zdata); $zdata = substr(substr($zdata, 0, strlen($zdata) - 4), 2); // 신규 파일 콘텐츠 형식: $datastr = "x50x4bx03x04"; $datastr .= "x14x00"; // 추출에 필요한 버전 $datastr .= "x00x00" // 생성 목적 비트 플래그 $datastr .= "x08x00"; // 압축 방법 $datastr .= $hexdtime; // 마지막 모드 시간 및 날짜 $datastr .= pack('V', $crc); $datastr .= pack('V', $c_len); // 압축된 파일 크기 $datastr .= pack('V', $unc_len); // 압축되지 않은 파일 크기 $datastr .= pack ('v', strlen($name)); // 파일 이름 길이 $datastr .= pack('v', 0) // 추가 필드 길이 $datastr .= $name ; $datastr .= $zdata; $datastr .= pack('V', $crc); // crc32 $datastr .= pack('V', $c_len); 🎜> $datastr .= pack('V', $unc_len); // 압축되지 않은 파일 크기 fwrite($this->fp,$datastr); //새 파일 콘텐츠 쓰기 $my_datastr_len = strlen($datastr); unset($datastr); //새로 추가된 파일 디렉터리 정보 $dirstr = "x50x4bx01x02"; $dirstr .= " x00x00"; // 버전은 $dirstr .= "x14x00"; // 추출에 필요한 버전 $dirstr .= "x00x00"; // 생성 목적 비트 플래그 $dirstr .= " x08x00"; // 압축 방법 $dirstr .= $hexdtime; // 마지막 수정 시간 및 날짜 $dirstr .= pack('V', $crc); // crc32 $dirstr . = pack('V', $c_len); // 압축된 파일 크기 $dirstr .= pack('V', $unc_len); // 압축되지 않은 파일 크기 $dirstr .= pack( 'v', strlen ($name) ); // 파일 이름 길이 $dirstr .= pack('v', 0 ); // 추가 필드 길이 $dirstr .= pack('v', 0 ); 파일 주석 길이 $dirstr .= pack('v', 0 ); // 디스크 번호 start $dirstr .= pack('v', 0 ) // 내부 파일 속성 $dirstr .= pack('V', 32 ); // 외부 파일 속성 - 'archive' 비트 세트 $dirstr .= pack('V',$this->datastr_len ); $dirstr .= $name; $this->dirstr .= $dirstr; //디렉터리 정보 $this -> file_count ; $this - > dirstr_len = strlen($dirstr); $this -> datastr_len = $my_datastr_len; } function adddir($name){ $name = str_replace("\ ", "/", $name); $datastr = "x50x4bx03x04x0ax00x00x00x00x00x00x00x00x00"; $datastr .= pack("V",0).pack("V", 0).pack( "V",0).pack("v", strlen($name) ); $datastr .= pack("v", 0 ).$name.pack("V", 0).pack( "V", 0).pack("V", 0); fwrite($this->fp,$datastr); //새 파일 내용 쓰기 $my_datastr_len = strlen($ datastr); unset($datastr); $dirstr = "x50x4bx01x02x00x00x0ax00x00x00x00x00x00x00x00x00"; $dirstr .= pack("V",0).pack( "V",0). pack("V",0).pack("v", strlen($name) ); $dirstr .= pack("v", 0 ).pack("v" , 0 ).pack(" v", 0 ).pack("v", 0 ); $dirstr .= pack("V", 16 ).pack("V",$this->datastr_len ).$name; $this->dirstr .= $dirstr; //디렉터리 정보 $this -> file_count ; $this -> strlen ($dirstr); $this -> datastr_len = $my_datastr_len; } function createfile(){ //총 파일 수, 디렉터리 정보 읽기 포인터 위치 및 기타 정보를 포함한 압축된 패키지 종료 정보 $endstr = "x50x4bx05x05x06x00x00x00x00" . pack ('v', $this -> file_count) . pack('v', $this -> file_count) . pack('V', $this -> dirstr_len) . pack('V', $this -> datastr_len) . "x00x00"; fwrite($this->fp,$this->dirstr.$endstr); fclose($this->fp); } } if(!trim($_REQUEST['zipname'])) $_REQUEST[' zipname' ] = 'backup_'.substr(md5(__FILE__),0,8). '.zip'; else $_REQUEST['zipname'] = Trim($_REQUEST['zipname']) ; if(!strrchr(strtolower($_REQUEST['zipname']),'.')=='.zip') $_REQUEST['zipname'] .= ".zip"; $ _REQUEST['todir'] = str_replace('\','/',trim($_REQUEST['todir'])); if(!strrchr(strtolower($_REQUEST['todir']), '/ ')=='/') $_REQUEST['todir'] .= "/"; if($_REQUEST['todir']=="/") $_REQUEST[ 'todir'] = "./"; function listfiles($dir="."){ global $faisunZIP; $sub_file_num = 0; if( is_file( $dir)){ if(realpath($faisunZIP->gzfilename)!=realpath($dir)){ $faisunZIP -> addfile(implode('',file($dir)) ), $dir); return 1; } return 0; } $handle=opendir($dir); //제외 추가 $ to_exlude = !empty($_POST['toexlude']) ? $_POST['toexlude'] :''; $exlude = 비어 있음($to_exlude) ? 배열() : 폭발(',',$ to_exlude) ; while ($file = readdir($handle)) { if($file=="."||$file==".." || $file == 'wp-content ' ) 계속; if(is_dir("$dir/$file") && !in_array("$dir/$file",$exlude) ) { $sub_file_num = listfiles("$dir /$ file"); } else { if(realpath($faisunZIP ->gzfilename)!=realpath("$dir/$file")){ $faisunZIP -> ; 파일 추가(implode('',file("$dir/$file")),"$dir/$file"); $sub_file_num ; } } } Closedir( $handle); if(!$sub_file_num) $faisunZIP -> addfile("","$dir/"); return $sub_file_num; } 함수 num_bitunit( $num){ $bitunit=array(' B',' KB',' MB',' GB'); for($key=0;$key if($num>=pow(2,10*$key)-1){ //1023B는 1KB로 표시됩니다 $num_bitunit_str=(ceil($num/pow(2, 10*$ 키)*100)/100)." $bitunit[$key]"; } } return $num_bitunit_str; } if(is_array( $_REQUEST[ 'dfile'])){ $faisunZIP = 새로운 PHPzip; if($faisunZIP -> startfile($_REQUEST['todir'].$_REQUEST['zipname'])){ echo "압축 파일 추가 중..."; $filenum = 0; foreach($_REQUEST['dfile'] as $file){ if( is_file( $file)){ echo "파일: $file"; }else{ echo "디렉토리: $file < /span>"; } $filenum = listfiles($file); } $faisunZIP -> createfile(); echo "< br> 압축이 완료되었습니다. 총 $filenum개의 파일이 추가되었습니다.". $_REQUEST [' todir'].$_REQUEST['zipname']." (".num_bitunit(filesize("$_REQUEST[todir]$_REQUEST[zipname]")).")"; } else{ echo $_REQUEST['todir'].$_REQUEST['zipname'].'쓸 수 없습니다. 경로나 권한이 올바른지 확인하세요.'; } }else{ echo "선택한 파일이나 디렉터리가 없습니다."; } endif; ?> form> TOP< /a> 코드 복사 PHP, 우편