>  기사  >  백엔드 개발  >  PHP 패키지 웹사이트 온라인 압축을 zip으로

PHP 패키지 웹사이트 온라인 압축을 zip으로

WBOY
WBOY원래의
2016-07-23 08:54:51856검색
  1. ?//재URL后参加 ?pwd=密码 查看生成密码
  2. $password = '8baa717e6265d1c1d762cc896151f821'; //l23
  3. ?>
  4. < 메타 http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. php ZIP压缩程序
  6. 在线压缩ZIP文件程序


  7. 이용 방법:选定要压缩的文件或目录(包含子目录),即可开始压缩。

  8. echo '当前目录:'. dirname(__FILE__) . ' 退出';
  9. else
  10. if(isset($_GET['pwd']) )
  11. echo '密码值:'. md5($_GET['pwd']) . '';
  12. else
  13. echo 'Tips:在URL后参加?pwd=密码 查看生成密码.';
  14. ?>
  • if(!isset($_REQUEST["myaction"])):
  • ?>
  • 验证密码:
  • 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;
  • ?>
  • TOP< /a>

  • 코드 복사


    PHP, 우편


    성명:
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.