pcltar 라이브러리는 http://www.phpconcept.net 에서 제공하는 무료 소프트웨어로 GNU/LGP를 따릅니다. 먼저,

파일을 다운받아 원하는 위치에 압축을 풀어줍니다.

Tar 압축파일 만들기

다운 받은 파일을 정상적으로 설치하였다면, tar.gzip 으로 파일(또는 폴더)를 압축해 보겠습니다.

예제 (ex #1

 <?php
 
// library 가 위치하는 경로를 작성합니다.
 // 기본 지정 폴더는 lib 입니다
 
if(!defined("PCLTAR_LIB_DIR"
)){
      
define("PCLTAR_LIB_DIR""lib"
);
 }
 
$g_pcltar_lib_dir PCLTAR_LIB_DIR
;
 include (
PCLTAR_LIB_DIR "/pclerror.lib.php3"
);
 include (
PCLTAR_LIB_DIR "/pcltrace.lib.php3"
);
 include (
PCLTAR_LIB_DIR "/pcltar.lib.php3"
);


 
// PclTarCreate($tarname, $list);
 // $list 에 하나의 파일(또는 폴더)이거나
 // 배열형인 파일(또는 폴더)가 올 수 있습니다.
 // $tarname 에 압축할 파일명을 지정합니다.
 // habony폴더를 test.tgz로 압축해 보겠습니다.
 
if(($err PclTarCreate("test.tgz","habony")) === 1
){
      echo 
"압축 파일 작성 성공!"
;
 } else {
      echo 
"압축파일 실패! 오류 코드:" $err
;
 }
 
?>


Tar 압축파일 추가


압축파일에 새로운 파일을 추가하거나 해당 압축파일이 없으면 새로 압축파일을 만듭니다.

예제 (ex #2

 <?php
 // library 가 위치하는 경로를 작성합니다.
 // 기본 폴더는 lib 입니다
 if(!defined("PCLTAR_LIB_DIR"
)){
      
define("PCLTAR_LIB_DIR""lib"
);
 }
 $g_pcltar_lib_dir PCLTAR_LIB_DIR
;
 include (
PCLTAR_LIB_DIR "/pclerror.lib.php3"
);
 include (
PCLTAR_LIB_DIR "/pcltrace.lib.php3"
);
 include (
PCLTAR_LIB_DIR "/pcltar.lib.php3"
);


 // PclTarAdd($tarname, $list);
 // $tarname 에 압축파일를 선택하여
 // 추가할 파일(또는 폴더)를 지정합니다.
 // $list 에 하나의 파일(또는 폴더)이거나
 // 배열형인 파일(또는 폴더)가 올 수 있습니다.
 $list = array("index.gif""chmod.php"
);
 if((
$err PclTarAdd("test.tgz"$list)) === 1
){
      echo 
"압축 파일 추가 성공!"
;
 } else {
      echo 
"압축파일 추가 실패! 오류 코드:" $err
;
 }
 ?>

Tar 압축파일 해제


예제 (ex #3

  <?php
 // library 가 위치하는 경로를 작성합니다.
 // 기본 폴더는 lib 입니다
 if(!defined("PCLTAR_LIB_DIR"
)){ 
     
define("PCLTAR_LIB_DIR""lib"
);
 }
 $g_pcltar_lib_dir PCLTAR_LIB_DIR
;
 include (
PCLTAR_LIB_DIR "/pclerror.lib.php3"
);
 include (
PCLTAR_LIB_DIR "/pcltrace.lib.php3"
);
 include (
PCLTAR_LIB_DIR "/pcltar.lib.php3"
);

 // PclTarExtract($tarname, $dir);
 // $tarname 에 해제할 압축파일를 선택합니다.
 // $dir 은 해제할 경로를 지정합니다.
 // 다음은 test.tgz 를 test폴더에 해제합니다.
 $list PclTarExtract("test.tgz""test");


 echo "<pre>";
 print_r($list
);
 /*
 결과:
 Array
 (
      [0] => Array
      ( 
           [checksum] => 2843
           [filename] => ./test/tar/retto
           [mode] => 16895
           [uid] => 0
           [gid] => 0
           [size] => 0
           [mtime] => 1310291714
           [typeflag] => 5
           [status] => already_a_directory
      )
      [1] => Array
      (
           [checksum] => 3411
           [filename] => ./test/tar/retto/admin
           [mode] => 16895
           [uid] => 0
           [gid] => 0
           [size] => 0
           [mtime] => 1310291392
           [typeflag] => 5
           [status] => already_a_directory
      )
      ...
 }
 */
 ?>


Tar
압축파일내 파일삭제


이제 부분적으로 압축파일내 파일을 삭제해 보겠습니다.

예제 (ex #4

 <?php
 // library 가 위치하는 경로를 작성합니다.
 // 기본 폴더는 lib 입니다
 if(!defined("PCLTAR_LIB_DIR"
)){ 
     
define("PCLTAR_LIB_DIR""lib"
);
 }
 $g_pcltar_lib_dir PCLTAR_LIB_DIR
;
 include (
PCLTAR_LIB_DIR "/pclerror.lib.php3"
);
 include (
PCLTAR_LIB_DIR "/pcltrace.lib.php3"
);
 include (
PCLTAR_LIB_DIR "/pcltar.lib.php3"
);

 // PclTarDelete($tarname, $list);
 // $tarname 에 부분 삭제할 압축파일를 선택합니다.
 // $list 에 하나의 파일(또는 폴더)이거나
 // 배열형인 파일(또는 폴더)가 올 수 있습니다.
 $list = array("index.gif","chmod.php"
);
 $delete PclTarDelete("test.tgz"$list
);


 echo 
"<pre>"
;
 print_r($delete
);
 /*
 결과:
 Array
 (
      [0] => Array
      ( 
           [checksum] => 2843
           [filename] => ./test/tar/retto
           [mode] => 16895
           [uid] => 0
           [gid] => 0
           [size] => 0
           [mtime] => 1310291714
           [typeflag] => 5
           [status] => already_a_directory
      )
      [1] => Array
      (
           [checksum] => 3411
           [filename] => ./test/tar/retto/admin
           [mode] => 16895
           [uid] => 0
           [gid] => 0
           [size] => 0
           [mtime] => 1310291392
           [typeflag] => 5
           [status] => already_a_directory
      )
      ...
 }
 */
 ?>

블로그 이미지

하보니

하보니와 함께하는 phP 초보

Tag 압축

댓글을 달아 주세요

pclzip 라이브러리는 http://www.phpconcept.net 에서 제공하는 무료 소프트웨어로 GNU/LGP를 따릅니다. 먼저,

파일을 다운받아 예제에 작성된 위치에 include 하여 클레스를 호출하면 원하는 작업을 할 수 있습니다.

압축파일 생성, 수정, 삭제시 반환되는 배열은 다음 표와 같습니다.

 

 배열
 filename 원본 파일(또는 폴더)
 stored_filename 변경된 파일(또는 폴더)
 size 원본 크기
 compressed_size 압축된 크기
 mtime 수정시간
 comment
 folder 폴더이면 "1" 반환
 index
 status 성공하면 "ok"반환
 crc

Zip 압축파일 만들기

파일(또는 폴더)를 압축해 보겠습니다.

예제 (ex #1

 <?php
 
// pcl lib 경로 설정
 
include('pclzip.lib.php'
);

 
// $create = new PclZip("생성할 압축파일 이름");
 // PclZip 객체에 test.zip 압축파일로 만듭니다.
 
$zipfile = new PclZip('test.zip'
);

 
// $create->create("파일 or 디렉토리");
 // $data에 하나의 파일(또는 폴더)이거나 배열형 파일(또는 폴더)가 올 수 있습니다. 
 // test.php 파일과 www 폴더를 현제 경로에 test.zip 파일로 압축하겠습니다.
 
$data 
= array();
 
$data = array("test.php""www"
);
 
$create $zipfile->create($data
);


 echo 
"<pre>\n"
;
 
print_r($create
);

 
?>

다음은
www 폴더를 압축하되 test폴더를 만들어 압축해 보겠습니다.

예제 (ex #2
 <?php
 
// pcl lib 경로 설정
 
include('pclzip.lib.php'
);

 
// $create = new PclZip("생성할 압축파일 이름");
 // PclZip 객체에 test.zip 압축파일로 만듭니다.
 
$zipfile = new PclZip('test.zip'
);

 
// $create->create("파일 or 디렉토리", );
 // $data에 하나의 파일(또는 폴더)이거나 배열형 파일(또는 폴더)가 올 수 있습니다. 
 // www 폴더를 현제 경로에 test.zip 파일로 압축하겠습니다.
 // 그리고 $data 뒤에 test 입력하고, 압축하면 stored_filename 변수에
 // 이동경로를 확인할 수 있습니다,
 
$data "www"
;
 
$create $zipfile->create($data"test"
);


 echo 
"<pre>\n"
;
 
print_r($create
);

 
?>


Zip
압축파일 추가


압축파일에 새로운 파일을 추가하거나 해당 압축파일이 없으면 새로 압축파일을 만듭니다.

예제 (ex #3

 <?php
 
// pcl lib 경로 설정
 
include('pclzip.lib.php'
);

 
// PclZip 객체를 생성합니다.
 // 추가할 압축파일를 선택합니다. 
 // test.zip 에 파일을 추가하겠습니다.
 
$zipfile = new PclZip('test.zip'
); 

 
// $data에 추가할 파일을 배열로 지정합니다.
 // $data에 하나의 파일(또는 폴더)이거나 배열형 파일(또는 폴더)가 올 수 있습니다. 
 
$data = array("index.gif","test.gif"
);
 
$add $zipfile->add($data
);


 echo 
"<pre>"
;
 
print_r($add
);

 
?>
 

Zip 압축파일내 엔트리 얻기


다음은 압축파일내 엔트리, 즉 파일 목록을 가져 오겠습니다. 반환파일에 대한 정보를 배열로 반환하기 때문에 적절히 수정해서 사용하면 됩니다.

예제 (ex #4

 <?php
 
// pcl lib 경로 설정
 
include('pclzip.lib.php'
);

 
// PclZip 객체를 생성합니다.
 // 목록을 가져올 파일을 선택합니다.
 
$zipfile = new PclZip('test.zip'
); 

 
// 엔트리 얻기
 
$list $zipfile->listContent
();


 echo 
"<pre>"
;
 
print_r($list
);
 
/*
 결과:
 Array
 (
    [0] => Array
        (
            [filename] => test/
            [stored_filename] => test/
            [size] => 0
            [compressed_size] => 0
            [mtime] => 1310291714
            [comment] =>
            [folder] => 1
            [index] => 0
            [status] => ok
            [crc] => 0
        )
    [1] => Array
        (
            [filename] => test/lib/
            [stored_filename] => test/lib/
            [size] => 0
            [compressed_size] => 0
            [mtime] => 1310291392
            [comment] =>
            [folder] => 1
            [index] => 1
            [status] => ok
            [crc] => 0
        )
        ...
 }
 */
 
?> 


Zip 압축파일 해제


압축파일을 현재 디렉토리에 압축해제 해보겠습니다.

예제 (ex #5

 <?php
 
// pcl lib 경로 설정
 
include('pclzip.lib.php'
);

 
// PclZip 객체를 생성합니다.
 //$객체 = new PclZip("해제할 압축파일 이름");
 
$zipfile = new PclZip('test.zip'
); 

 
// 참고로 $extract 변수를 정의하지 않아도 압축해제는 가능합니다.
 
$extract $zipfile->extract
(); 


 echo 
"<pre>"
;
 
print_r($extract
);

 
?>

다음은 다른 디렉토리에 압축파일을 해제하도록 하겠습니다.

예제 (ex #6

 <?php
 
// pcl lib 경로 설정
 
include('pclzip.lib.php'
);

 
// PclZip 객체를 생성합니다.
 //$객체 = new PclZip("해제할 압축파일 이름");
 
$zipfile = new PclZip('test.zip'
); 

 
// 압축파일을 habony 폴더에 압축해제합니다.
 
$extract $zipfile->extract(PCLZIP_OPT_PATH'./habony/'
); 


 echo 
"<pre>"
;
 
print_r($extract
);

 
?>

Zip 압축파일내 파일삭제


이제 부분적으로 압축파일내 파일을 삭제해 보겠습니다.

예제 (ex #7

 <?php
 
// pcl lib 경로 설정
 
include('pclzip.lib.php'
);


 
// PclZip 객체를 생성합니다.
 // 압축파일을 선택합니다.
 
$zipfile = new PclZip('test.zip'
); 

 
// test.gif 를 삭제하겠습니다.
 // 하나의 파일(또는 폴더)이거나 배열형 파일(또는 폴더)가 올 수 있습니다. 
 
$delete $zipfile->delete(PCLZIP_OPT_BY_NAME,"test.gif"
);


 echo 
"<pre>"
;
 
print_r($delete
);

 
?>

블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요

해당 디렉토리를 통째로 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 'mail'


 
// 압축파일 이름 
 
$zipfile "zipfile.zip"


 
$zip = new ZipArchive

 
$res $zip->open($zipfileZipArchive::CREATE
); 
 if (
$res === TRUE
) {        
      
dirZip($zip,$dir
); 
      
$zip->close
(); 
 } else { 
      echo 
"에러 코드: ".$res

 } 
 
?>


블로그 이미지

하보니

하보니와 함께하는 phP 초보

Tag 압축

댓글을 달아 주세요

mixed ZipArchive::setCommentName ( string $name , string $comment ) (PHP 5 >= 5.2.0, PECL zip >= 1.4.0)

zip압축파일내 대상 파일에 설명을 붙일 수 있는 기능을 제공하는데, 다음 그림의 "설명" 부분을 보면 알 수 있듯이 필요시 코멘트를 남길 수 있습니다.


예제 (ex #1
 <?php
 $zip 
= new ZipArchive
;
 
$res $zip->open('php.zip'
);
 if (
$res === TRUE
) {
      
$zip->setCommentName('test.txt''코멘트를 남깁니다.'
);
      
$zip->close
();
      echo 
'ok'
;
 } else {
      echo 
'error'
;
 } 

 ?>

다음은 파일에 정상적으로 코멘트가 기록되었는지 확인해 보겠습니다.

예제 (ex #2
 <?php
 $zip 
= new ZipArchive
;
 
$res $zip->open('php.zip'
);
 if (
$res === TRUE
) {
      
// Index를 알고 있다면 ZipArchive::getCommentIndex를 사용해도 됩니다.
      
var_dump($zip->getCommentName('test.txt')); 
// 결과: string(18) "코멘트를 남깁니다."
 
} else {
      echo 
'에러 코드:' $res
;
 }
 
?> 

 

블로그 이미지

하보니

하보니와 함께하는 phP 초보

Tag 압축

댓글을 달아 주세요

mixed ZipArchive::open ( string $filename [, int $flags ] ) (PHP 5 >= 5.2.0, PECL zip >= 1.1.0)

zip 압축 클레스로 할 수 있는 일은 읽고, 압축하고, 해제하고, 수정할 수 있는 거의 모든 작업을 할 수 있습니다. 이 기능을 사용하기 위해서 윈도우는 php.ini의 php_zip.dll를 활성화하고, 리눅스의 경우 --enable-zip 설정 옵션을 해주어야 합니다. $flags는 다음 표의 상수를 사용할 수 있습니다.

 상수
 ZIPARCHIVE::OVERWRITE
 ZIPARCHIVE::CREATE
 ZIPARCHIVE::CHECKCONS

압축파일 오픈 작업이 성공하면 true를, 실패하면 다음 표의 상수를 반환합니다.

 상수
 ZIPARCHIVE::ER_EXISTS 값: 10
 ZIPARCHIVE::ER_INCONS 값: 21
 ZIPARCHIVE::ER_INVAL 값: 18
 ZIPARCHIVE::ER_MEMORY 값: 14
 ZIPARCHIVE::ER_NOENT 값: 9
 ZIPARCHIVE::ER_NOZIP 값: 19
 ZIPARCHIVE::ER_OPEN 값: 11
 ZIPARCHIVE::ER_READ 값: 5
 ZIPARCHIVE::ER_SEEK 값: 4

Zip 압축파일 해제


작성방법은 압축파일을 "오픈"하고, 원하는 위치에 압축 "해제"하고, "닫기" 순으로 작성하면 됩니다.

예제 (ex #1

 <?php
 $zip 
= new ZipArchive
;
 
// 압축파일이 있는 위치를 지정합니다.
 
$res $zip->open('./zzz/phpzipfile.zip'
);
 if ((
$res === TRUE) && (file_exists('./mail') === TRUE
)) {
    echo 
'압축파일 오픈에 성공하였습니다.'
;

    
// 다음 디렉토리 위치에 압축파일을 해제하도록 하겠습니다.
    
$zip->extractTo('./mail'
);

    
// 모든 작업이 완료되었으면 닫습니다.
    
$zip->close
();
    echo 
"ok"
;
 } else {
    
// 압축파일 오픈에 실패하면 에러코드를 표시합니다.
    
if(ZIPARCHIVE::ER_NOZIP === $res
) {
         echo 
'압축파일을 찾을 수 없습니다.'
;
    }
 }
 
?>


다음은 디렉토리에 압축파일을 부분적으로 해제하도록 하겠습니다.

예제 (ex #2
 <?php
 $zip 
= new ZipArchive
;
 
// 압축파일이 있는 위치를 지정합니다.
 
$res $zip->open('./zzz/phpzipfile.zip'
);
 if ((
$res === TRUE) && (file_exists('./mail') === TRUE
)) {
    echo 
'압축파일 오픈에 성공하였습니다.'
;

    
// 다음 디렉토리 위치에 압축파일을 부분적으로 해제하도록 하겠습니다.
    // 전체가 아닌 부분적으로 해제할 파일을 $file_array배열에 작성합니다.
    
$file_array = array("test.php","test.txt""PHPgoldfile.php"
);
    
$zip->extractTo('./mail',$file_array
);

    
// 모든 작업이 완료되었으면 닫습니다.
    
$zip->close
();
    echo 
"ok"
;
 } else {
    
// 압축파일 오픈에 실패하면 에러코드를 표시합니다.
    
if(ZIPARCHIVE::ER_NOZIP === $res
) {
         echo 
'압축파일을 찾을 수 없습니다.'
;
    }
 }
 
?>

Zip 압축파일내 엔트리 얻기


압축파일내 엔트리를 가져 오겠습니다. 가져오는 순서는 같습니다. 열기, 읽기, 닫기순으로 작성하면 됩니다.

예제 (ex #3

 <?php 
 $zip 
= new ZipArchive

 if (
$err $zip->open('phpzipfile.zip'
)){ 
     for(
$i 0$i $zip->numFiles$i
++) {
          
// 디렉토리는 끝에 /가 붙습니다.
          
echo 'filename: ' $i$zip->getNameIndex($i) . '<br />'

     }
     
$zip->close
();
 } else { 
     echo 
'압축파일을 읽을 수 없습니다.'

 } 

 
/*
 결과:
 filename: 0 phpzipfile/
 filename: 1 phpzipfile/PHPgoldfile.php
 filename: 2 phpzipfile/READ-ME.html
 filename: 3 ./mail/
 flename: 4 ./news/
 flename: 5 test.txt
 flename: 6 PHPgoldfile.php
 flename: 7 russian_letters/
 flename: 8 1111entryname.txt
 flename: 9 dir/PHPgoldfile.php
 flename: 10 test.php
 */
 
?>

Zip 압축파일내 파일삭제


이제 부분적으로 압축파일내 파일을 삭제해 보겠습니다.

예제 (ex #4

 <?php 
 $zip 
= new ZipArchive

 if (
$err $zip->open('phpzipfile.zip'
)){ 
    
// 파일내 test.php파일을 삭제하겠습니다.
    // 인덱스 번호로 파일을 삭제할 수도 있습니다. Index 10은 test.php파일입니다.
    // $zip->deleteIndex(10);
    
if($zip->deleteName('test.php'
)){
         echo 
"ok!"
;
    }
    
// 엔트리 얻기
    
for($i 0$i $zip->numFiles$i
++) {
          echo 
'filename: ' $i $zip->getNameIndex($i) . '<br />'

     }
     
$zip->close
();
 } else { 
     echo 
'압축파일을 읽을 수 없습니다.'

 } 

 
/*
 결과:
 filename: 0 phpzipfile/
 filename: 1 phpzipfile/PHPgoldfile.php
 filename: 2 phpzipfile/READ-ME.html
 filename: 3 ./mail/
 flename: 4 ./news/
 flename: 5 test.txt
 flename: 6 PHPgoldfile.php
 flename: 7 russian_letters/
 flename: 8 1111entryname.txt
 flename: 9 dir/PHPgoldfile.php
 */
 
?>

Zip 압축파일 수정


압축파일에 새로운 파일을 추가하거나 디렉토리를 만들 수 있습니다.

예제 (ex #5

  <?php
 
if($fp fopen('test.php','r'
)){
      
$string fread($fp,filesize('test.php'
));
      if(
is_resource($fp
)){
           
fclose($fp
);
      }
 }

 
$zip = new ZipArchive
;
 
$res $zip->open('phpzipfile.zip'
);
 if (
$res === TRUE
) {
      
// dir/pear.php에 $string을 작성합니다.
      // dir/pear.php파일이 없으면 디렉토리와 파일을 새로 만듭니다.
      
$zip->addFromString('dir/pear.php'$string
);

      
// 압축파일을 오픈하여 test.php파일의 내용을 copyfile.txt 파일에 복사합니다.
      // copyfile.txt 파일이 없으면 새로 만듭니다.
      
$zip->addFile('test.php''copyfile.txt'
);

      
// test.php파일을 압축파일에 추가합니다.
      
$zip->addFile('test.php'
);

      
// 압축파일내에 "user/mkdir"디렉토리를 만듭니다.
      
$zip->addEmptyDir("user/mkdir"
);

      
// PHPgoldfile.php파일을 newname.txt파일로 이름을 변경합니다.
      
$zip->renameName('PHPgoldfile.php','newname.txt'
);

      
// 닫기
      
$zip->close
();
      echo 
'ok'
;
 } else {
    echo 
'failed: '.$res
;
 }
 
?>

 
다음은 압축파일내 특정 이미지 파일을 png로 출력해 보겠습니다.

예제 (ex #6

 <?php
 $zip 
= new ZipArchive
;
 
$res $zip->open('phpzipfile.zip'
);
 if (
$res === TRUE
) {
      
$image $zip->getFromName('test.bmp'
);
      
$img imagecreatefromstring($image
);
      
imagepng($img'test.png'
);

      
$zip->close
();
      echo 
'ok'
;
 } else {
    echo 
'failed: '.$res
;
 }
 
?>

 

Zip 압축파일 만들기

이 기능으로 특정 폴더를 압축해 보겠습니다. 압축하려면 ZipArchive::CREATE상수를 정의해야 하며, 이미 압축파일이 존재한다면 ZipArchive::OVERWRITE로 파일을 덮어 쓰게 합니다.

예제 (ex #7

 <?php
 $zip 
= new ZipArchive
;
 
$res $zip->open('tempfile.zip'ZipArchive::CREATE
);
 if (
$res === TRUE
) { 
      
$zip->addFile('test.php'
);
      
$zip->addFile('globtmpfile.php'
);
      
$zip->close
();
 } else {
      echo 
"에러 코드: ".$res
;
 }
 
?>

블로그 이미지

하보니

하보니와 함께하는 phP 초보

Tag 압축

댓글을 달아 주세요