개발자/PHP

[PHP]ZipArchive 모듈을 이용하여 폴더 통째로 압축하기

PHP 모듈인 ZipArchive를 이용해서 폴더를 ZIP 파일로 압축할 수 있는 소스다.

<?php 
  function dirZip($resource,$dir) { 
     if(filetype($dir) === 'dir') {
       clearstatcache(); 

       if($fp = @opendir($dir)) { 
         while(false !== ($ftmp = readdir($fp))){ 
           if(($ftmp !== ".") && ($ftmp !== "..") && ($ftmp !== ""))

           { 
             if(filetype($dir.'/'.$ftmp) === 'dir') { 
               clearstatcache();   

               // 디렉토리이면 생성하기 
               $resource->addEmptyDir($dir.'/'.$ftmp); 
               set_time_limit(0);   

               dirZip($resource,$dir.'/'.$ftmp); 
             } else { 

               // 파일이면 파일 압축하기 
               $resource->addFile($dir.'/'.$ftmp); 
             } 
           } 
                  } 
           } 
           if(is_resource($fp)){ 
                 closedir($fp);
           } 
         } else { 
            // 파일이면 파일 압축하기 
            $resource->addFile($dir); 
       } 
   } // end func 


 // 대상 디렉토리 (해당 디렉토리 안의 하위 디렉토리까지 압축이 된다.)
 $dir = 'record'; 

 // 압축파일 이름 
 $date = date('Y_m_d');
 $zipfile = "/file/record_".$date.".zip"; 

 $zip = new ZipArchive; 
 $res = $zip->open($zipfile, ZipArchive::CREATE); 
 if ($res === TRUE) {        
      dirZip($zip,$dir); 
      $zip->close(); 
 } else { 
      echo $res; //오류 코드 
 } 
 ?>

압축이 끝나면 file 디렉토리에 압축된 파일이 있는 것을 볼 수 있다.

혹시 내 서버에 ZipArchive 모듈이 없다면?

설치해야지모...

apt-get install php-zip

이거 하나면 버전에 맞게 알아서 모듈이 설치된다

설치 완료 후 잊지말고 아파치 재시작.