[Library] Pclzip - php를 이용한 zip파일 압축, 압축해제
웹비젼
APMS/GNU/PHP
0
1046
2018.02.27 18:24
다운로드시 10,000MP 차감 (최초 1회 / 재다운로드시 무료)
+ 0
[dontorzs]example-Pclzip.zip (512.0K)
1. PHP Pclzip 라이브러리란?
PHP Cache_Lite 라이브러리는 php 를 이용한 zip파일 압축 및 압축해제를 지원한다.
해당 라이브러리를 이용하여 개발할 경우 여러개의 이미지를 압축하여 한번에 업로드 하거나
업로드받은 특정 그룹의 첨부파일들을 압축하여 한번에 다운받는등
첨부파일과 관련하여 개발에 편의성을 향상시킬수 있다.
2. 배포 사이트
Pclzip 라이브러리는 직접 다운받아 서버에 업로드 한 후 Class를 선언하는 형태로 사용 가능하다.
출처- http://www.phpconcept.net/pclzip
3. 적용/사용 방법
ㄱ. 서버에 다운받은 라이브러리를 업로드/Include.
ㄴ. Pclzip 클래스를 생성. (클래스 생성시 파라메터로 zip파일의 경로를 전달)
ㄷ. create() 메서드 또는 add() 메서드를 이용하여 zip파일을 생성/파일압축.
ㄹ. listContent() 메서드를 이용하여 zip파일 안에 파일리스트 및 파일정보 확인.
ㅁ. extract() 메서드를 이용하여 zip파일 압축해제.
4. Example
ㄱ. Pclzip 을 이용한 zip파일 압축하기
undefined
- <?
- // INCLUDE - Pclzip 라이브러리
- include_once '../../lib/pclzip.lib.php';
- // DEFINE - 이미지, ZIP파일 PATH 상수선언
- define('PATH_IMG', '../../data/img/');
- define('PATH_ZIP', './');
- // IMG dir의 파일 리스트 호출
- $dir = scandir(PATH_IMG);
- $imgs = array();
- for($i=0,$maxi=count($dir); $i<$maxi; $i++){
- if(in_array($dir[$i], array('.', '..'))) continue;
- if(array_pop(explode('.', $dir[$i])) != 'gif') continue;
- $imgs[] = PATH_IMG.$dir[$i];
- if(stripos($dir[$i], 'cat') !== false) $cats[] = PATH_IMG.$dir[$i];
- if(stripos($dir[$i], 'dog') !== false) $dogs[] = PATH_IMG.$dir[$i];
- }
- // ZIP 파일 경로&파일명 설정
- $zip = array(
- 'case1' => PATH_ZIP.'case1.zip', // create() 메서드로 단일파일 압축, 디렉토리 경로 유지
- 'case2' => PATH_ZIP.'case2.zip', // create() 메서드로 복수파일 압축, 디렉토리 경로 제거
- 'case3' => PATH_ZIP.'case3.zip', // add() 메서드로 단일파일 압축, 디렉토리 경로 유지
- 'case4' => PATH_ZIP.'case4.zip' // add() 메서드로 복수파일 압축, 생성된 압축파일에 파일추가, 디렉토리 경로 제거
- );
- // 기존파일 삭제
- if(file_exists($zip['case1'])) unlink($zip['case1']);
- if(file_exists($zip['case2'])) unlink($zip['case2']);
- if(file_exists($zip['case3'])) unlink($zip['case3']);
- if(file_exists($zip['case4'])) unlink($zip['case4']);
- /* CASE1 */
- $pclzip = new Pclzip($zip['case1']);
- $result1 = $pclzip->create($imgs[0]);
- echo "<pre>"; print_r($result1); echo "</pre>";
- /*
- 결과값 :
- Array
- (
- [0] => Array
- (
- [filename] => ../../data/img/cat_01.gif
- [stored_filename] => ../../data/img/cat_01.gif
- [size] => 5070973
- [compressed_size] => 5063262
- [mtime] => 1481776172
- [comment] =>
- [folder] =>
- [index] => -1
- [status] => ok
- [crc] => -261599109
- )
- )
- */
- /* CASE2 */
- $pclzip = new Pclzip($zip['case2']);
- $result2 = $pclzip->create($imgs, PCLZIP_OPT_REMOVE_ALL_PATH);
- echo "<pre>"; print_r($result2); echo "</pre>";
- /*
- 결과값 :
- Array
- (
- [0] => Array => ../../data/img/cat_01.gif
- [stored_filename] => cat_01.gif
- [size] => 5070973
- [compressed_size] => 5063262
- [mtime] => 1481776172
- [comment] =>
- [folder] =>
- [index] => -1
- [status] => ok
- [crc] => -261599109
- )
- [1] => ...
- [2] => ...
- )
- */
- /* CASE3 */
- $pclzip = new Pclzip($zip['case3']);
- $result3 = $pclzip->add($cats[0]);
- echo "<pre>"; print_r($result3); echo "</pre>";
- /*
- 결과값 :
- Array
- (
- [0] => Array
- (
- [filename] => ../../data/img/cat_01.gif
- [stored_filename] => ../../data/img/cat_01.gif
- [size] => 5070973
- [compressed_size] => 5063262
- [mtime] => 1481776172
- [comment] =>
- [folder] =>
- [index] => -1
- [status] => ok
- [crc] => -261599109
- )
- )
- */
- /* CASE4 */
- $pclzip = new Pclzip($zip['case4']);
- $result4 = $pclzip->add($cats, PCLZIP_OPT_REMOVE_ALL_PATH);
- $result4[] = array_pop($pclzip->add($dogs[0], PCLZIP_OPT_REMOVE_ALL_PATH));
- $result4[] = array_pop($pclzip->add($dogs[1], PCLZIP_OPT_REMOVE_ALL_PATH));
- $result4[] = array_pop($pclzip->add($dogs[2], PCLZIP_OPT_REMOVE_ALL_PATH));
- $result4[] = array_pop($pclzip->add($dogs[3], PCLZIP_OPT_REMOVE_ALL_PATH));
- echo "<pre>"; print_r($result4); echo "</pre>";
- /*
- 결과값 :
- Array
- (
- [0] => Array => ../../data/img/cat_01.gif
- [stored_filename] => cat_01.gif
- [size] => 5070973
- [compressed_size] => 5063262
- [mtime] => 1481776172
- [comment] =>
- [folder] =>
- [index] => -1
- [status] => ok
- [crc] => -261599109
- )
- [1] => ...
- [2] => ...
- )
- */
- ?>
ㄴ. Pclzip 을 이용한 zip파일 파일내용 미리보기
undefined
- <?
- // INCLUDE - Pclzip 라이브러리
- include_once '../../lib/pclzip.lib.php';
- // DEFINE - 이미지, ZIP파일 PATH 상수선언
- define('PATH_ZIP', '../../data/img.zip');
- /* zip파일 파일내용 미리보기 */
- $pclzip = new Pclzip(PATH_ZIP);
- $result = $pclzip->listContent();
- echo "<pre>"; print_r($result); echo "</pre>";
- /*
- 결과값 :
- Array
- (
- [0] => Array
- (
- [filename] => cat_01.gif
- [stored_filename] => cat_01.gif
- [size] => 5070973
- [compressed_size] => 5067918
- [mtime] => 1481776172
- [comment] =>
- [folder] =>
- [index] => 0
- [status] => ok
- [crc] => -261599109
- )
- [1] => ...
- [2] => ...
- )
- */
- ?>
ㄷ. Pclzip 을 이용한 zip파일 압축해제
undefined
- <?
- // INCLUDE - Pclzip 라이브러리
- include_once '../../lib/pclzip.lib.php';
- // DEFINE - 이미지, ZIP파일 PATH 상수선언
- define('PATH_ZIP', '../../data/img.zip');
- define('PATH_IMG', './img/');
- if(!is_dir(PATH_IMG)) mkdir(PATH_IMG, 0755, true);
- /* zip파일 현재 디렉토리에 압축 해제 */
- $pclzip = new Pclzip(PATH_ZIP);
- $result1 = $pclzip->extract();
- echo "<pre>"; print_r($result1); echo "</pre>";
- /*
- 결과값 :
- Array
- (
- [0] => Array
- (
- [filename] => cat_01.gif
- [stored_filename] => cat_01.gif
- [size] => 5070973
- [compressed_size] => 5067918
- [mtime] => 1481776172
- [comment] =>
- [folder] =>
- [index] => 0
- [status] => ok
- [crc] => -261599109
- )
- [1] => ...
- [2] => ...
- )
- */
- /* zip파일 지정 디렉토리에 압축 해제 */
- $pclzip = new Pclzip(PATH_ZIP);
- $result2 = $pclzip->extract(PCLZIP_OPT_PATH, PATH_IMG);
- echo "<pre>"; print_r($result2); echo "</pre>";
- /*
- 결과값 :
- Array
- (
- [0] => Array
- (
- [filename] => cat_01.gif
- [stored_filename] => cat_01.gif
- [size] => 5070973
- [compressed_size] => 5067918
- [mtime] => 1481776172
- [comment] =>
- [folder] =>
- [index] => 0
- [status] => ok
- [crc] => -261599109
- )
- [1] => ...
- [2] => ...
- )
- */
- ?>
5. Method
- ㄱ. create
- 용도 :Pclzip을 이용하여 압축파일을 생성한다.
파라메터로 압축하려는 대상 파일명을 string이나 array의 형태로 전달한다.
별다른 옵션없이 파일명만 전달하면 해당 파일의 경로를 유지한채로 압축되며,
경로를 제외한 파일만 압축하려는 경우 파일명 파라메터와 함께
PCLZIP_OPT_REMOVE_ALL_PATH 상수를 함께 전달한다. - 사용법 :$pclzip->create($file);
$pclzip->create($file, PCLZIP_OPT_REMOVE_ALL_PATH);
- ㄴ. add
- 용도 :Pclzip을 이용하여 압축파일을 생성 또는
기존의 생성된 압축파일에 파일을 추가한다.
파라메터나 사용법은 create와 동일하다. - 사용법 :$pclzip->add($file);
$pclzip->add($file, PCLZIP_OPT_REMOVE_ALL_PATH);
- ㄷ. listContent
- 용도 :Pclzip을 이용하여 zip 파일의 내용을 확인한다.
- 사용법 :$pclzip->listContent();
- ㄹ. extract
- 용도 :Pclzip을 이용하여 zip 파일의 압축을 해제한다.
파라메터를 지정하지 않는경우 실행중인 파일의 디렉토리에 압축을 해제하며,
특정 디렉토리를 지정할 경우 PCLZIP_OPT_PATH 상수와 함께 압축을 해제할 디렉토리를 지정한다. - 사용법 :$pclzip->extract();
$pclzip->extract(PCLZIP_OPT_PATH, '/tmp/');
6. Result
Pclzip은 압축을 실행할경우 압축된 파일의 정보를,
압축을 해제할 경우 해제된 파일의 정보를, listContent 메서드를 이용할경우 압축파일의 내용을
array의 형태로 반환하며 세부내용은 아래 표와 같다.
filename | 파일의 이름. add의 경우, 메소드를 호출 할 때 주어진 이름입니다. 추출의 경우 추출 된 파일의 실제 이름입니다. (아카이브에 저장된 이름이 아님) | ||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
stored_filename | 파일의 저장된 이름입니다. | ||||||||||||||||||||||||
size | 파일의 실제 크기. | ||||||||||||||||||||||||
compressed_size | 아카이브의 압축 된 크기. (헤더 오버 헤드 없음) | ||||||||||||||||||||||||
mtime | 파일의 최종 수정 날짜 및 시간 (UNIX 타임 스탬프) | ||||||||||||||||||||||||
comment | 파일과 관련된 주석. | ||||||||||||||||||||||||
folder | 해당 파일이 폴더일 경우 true 아닐경우 false. | ||||||||||||||||||||||||
index | 아카이브의 파일 색인. (설정된 경우) | ||||||||||||||||||||||||
content | 추출 된 파일의 내용. 이 행은 옵션 인수 PCLZIP_OPT_EXTRACT_IN_STRING이 설정된 경우에만 나타납니다. | ||||||||||||||||||||||||
status | 해당 파일에 대한 Pclzip의 실행 결과코드. 코드의 값은 아래 표와같다.
|