zip.php 는 zip 사용에 도움되기 위한 기본 설명서입니다.

zip 에서 필요한 library 는 다음과 같습니다.

  1. zip.php
    Zip 을 제어합니다.
  2. download.php
    로컬 파일을 다운로드 합니다.
  3. mime_types.php
    파일 Mime-Type 을 출력합니다.

사용 가능한 목록.

Zip 클래스에서 사용할 수 있는 메소드 목록을 설명합니다.

  • zip_open( zip_name, mode )

    ZIP 을 열거나 만듭니다.

    • zip_name: ZIP 파일 이름.
    • mode: true or null. true 이면 Zip 파일을 만듭니다.
    							
    // 새로운 test.zip 파일을 만듭니다.
    $zip = new zip();
    $zip->zip_open('test.zip', true);
  • zip_read( zip_name )

    ZIP 파일 내의 파일 목록을 배열로 반환합니다.

    • zip_name: 열기할 ZIP 파일 이름
    • 반환 값:
      
      Array(
        index => 파일 번호. 0 부터 시작.
        path => 폴더 이름을 포함한 파일 이름. 폴더는 끝에 / 이 붙습니다. ex.) classes/class.php
        name => 파일 이름. 폴더는 저장되지 않습니다. ex.) class.php
        comment => 파일(또는 폴더) 설명.
        filetype => 파일 학장자, ex.) php, exe
        mtime => 파일 업데이트 시간 타임스탬프, ex.) 1444431798, date("Y-m-d", 1444431798)
        size => 실제 파일 크기, 폴더는 n/a 로 저장됨.
        comp_size => 압축 파일 크기, 
        dir => 폴더이면 true 로 저장됨.
        percent => 압축률. size - comp_size 의 압축률
      );

    							
    $zip = new zip();
    $list = $zip->zip_read('test.zip');
    print_r($list);
  • zip_unzip( zip_name, destination, arrangement )

    ZIP 파일을 부분(또는 전체)압축 해제합니다.

    • zip_name: ZIP 파일 이름
    • destination: 압축 해제 할 경로
    • arrangement: 선택 사항. 압축 해제 할 배열(또는 문자열).
      생략하면 파일 전체 해제합니다.

    							
    ex.1) 현재 폴더에 전체 압축 해제합니다.
    $zip = new zip();
    $zip->zip_unzip('test.zip', './');
    
    ex.2) 현재 폴더에 부분 해제 합니다.
    $zip = new zip();
    $arrangement = array('class/class.php', 'index.php', 'test.php');
    $zip->zip_unzip('test.zip', './', $arrangement);
  • zip_create( zip_name, physical )

    로컬 파일(또는 폴더)를 재귀적으로 압축하여 파일을 만듭니다.

    • zip_name: zip 파일을 생성할 파일 이름.
    • physical: 로컬 파일(또는 폴더)를 압축할 배열(또는 문자열).

    							
    $zip = new zip();
    $physical = array('index.php', 'class', 'image');
    $zip->zip_create('test.zip', $physical);
  • zip_compress( physical, object )

    로컬 파일(또는 폴더)를 재귀적으로 압축합니다.

    • physical: 로컬 파일(또는 폴더)를 압축할 배열(또는 문자열).

    							
    $zip = new zip();
    
    if(false !== $ftp->zip_open('test.zip', true))
    {
    	$physical = array('index.php', 'class', 'image');
    	foreach($physical as $w)
    	{
    		$zip->zip_compress('test.zip', $w);
    	}
    }
    $zip->zip_close();
  • zip_delete( original )

    ZIP 파일 내 파일을 부분 삭제합니다.

    • original: 삭제할 문자열(또는 인덱스 번호).

    							
    $zip = new zip();
    
    if(false !== $ftp->zip_open('test.zip'))
    {
    	$original = array('index.php', 'class.php');
    	foreach($original as $w)
    	{
    		$zip->zip_delete($w);
    	}
    }
    $zip->zip_close();
  • zip_download( zip_name, gzip )

    ZIP 파일 내 파일을 다운로드합니다.

    • zip_name: 압축 파일 이름.
    • gzip: 다운로드할 파일 이름(또는 인덱스 번호).

    							
    $zip = new zip();
    $ftp->zip_download('test.zip', 'class.php');
  • zip_put( original, newname, comment )

    ZIP 파일 내 새로운 파일을 추가 합니다.

    • original: 원본 파일 이름.
    • newname: 압축할 파일 이름.
    • comment: 선택 사항. 파일에 추가할 설명.

    							
    $zip = new zip();
    if(false !== $ftp->zip_open('test.zip'))
    {
    	$zip->zip_put($original, $newname, $comment);
    }
    $zip->zip_close();
  • zip_put_file( name, str)

    ZIP 파일 내 파일에 문자열을 추가 합니다.

    • name: 추가할 파일 이름(또는 인덱스 번호).
    • str: 추가할 내용.

    									
    // 내용을 test.php 파일에 추가하여 test.zip 로 압축합니다.
    $name = 'test.php';
    $str = 'Hello Habony';
    
    $zip = new zip();
    if(false !== $ftp->zip_open('test.zip'))
    {
    	$zip->zip_put_file($name, $str);
    }
    $zip->zip_close();
  • zip_get_file( name )

    ZIP 파일 내 파일의 내용을 가져 옵니다.

    • name: 가져 올 파일 이름(또는 인덱스 번호).

    							
    // test.zip 파일 내 main.php 파일의 내용을 가져 옵니다.
    $zip = new zip();
    if(false !== $ftp->zip_open('test.zip'))
    {
    	$str = $zip->zip_get_file('main.php');
    }
    $zip->zip_close();
    
    echo $str;
  • zip_rename( original, newname, comment )

    ZIP 파일 내 파일의 이름을 변경합니다.

    • original: 원본 파일 이름(또는 인덱스 번호).
    • newname: 새로운 파일 이름.
    • comment: 설명을 변경합니다.

    							
    // test.zip 파일 내 test.php 파일 이름을 변경합니다.
    $zip = new zip();
    if(false !== $ftp->zip_open('test.zip'))
    {
    	$original = 'test.php';
    	$newname = 'main.php';
    	$comment = '새로운 이름';
    
    	$str = $zip->zip_rename($original, $newname, $comment);
    }
    $zip->zip_close();
    
    echo $str;
  • zip_mkdir( dir )

    ZIP 파일 내 새로운 폴더를 추가 합니다.

    • dir: 폴더를 만듭니다.

    							
    $zip = new zip();
    if(false !== $ftp->zip_open('test.zip'))
    {
    	$zip->zip_mkdir('new_dirname');
    }
    $zip->zip_close();

반환되는 에러 목록

Zip 을 만들거나 읽기 중 에러가 발생하면 $this->zip_err 에 저장될 에러 목록을 설명합니다.

  • Zip 파일이 이미 존재하면 출력되는 에러입니다.
    					
    array(
    	'code' => 10,
    	'message' => "File already exists."
    );
  • Zip 파일에 오류가 있을 때 출력되는 에러입니다.
    					
    array(
    	'code' => 21,
    	'message' => "Zip archive inconsistent."
    );
  • 잘못된 인수일 때 출력하는 에러입니다.
    					
    array(
    	'code' => 18,
    	'message' => "Invalid argument."
    );
  • 메모리 확보에 실패하였을 때 출력하는 에러입니다.
    					
    array(
    	'code' => 14,
    	'message' => "Malloc failure."
    );
  • Zip 파일이 존재하지 않을 때 출력하는 에러입니다.
    					
    array(
    	'code' => 9,
    	'message' => "No such file."
    );
  • Zip 압축 파일이 아니라면 출력하는 에러입니다.
    					
    array(
    	'code' => 19,
    	'message' => "Not a zip archive."
    );
  • Zip 파일을 열 수 없을 때 출력하는 에러입니다.
    					
    array(
    	'code' => 11,
    	'message' => "Can't open file."
    );
  • Zip 파일 읽기 오류일 때 출력하는 에러입니다.
    					
    array(
    	'code' => 5,
    	'message' => "Read error."
    );
  • Zip 파일 탐색 오류일 때 출력하는 에러입니다.
    					
    array(
    	'code' => 4,
    	'message' => "Seek error."
    );
  • Zip 압축 파일 해제에 실패하였을 때 출력하는 에러입니다.
    					
    array(
    	'code' => 100,
    	'message' => "Extract Failed!"
    );
  • Zip 압축 파일 다운로드 중 에러가 발생하면 출력하는 에러입니다.
    					
    array(
    	'code' => 101,
    	'message' => "File Not Found."
    );
  • 알 수 없는 에러가 발생하면 출력하는 에러입니다.
    					
    array(
    	'code' => 0,
    	'message' => "Unknown Error."
    );

ZIP 파일 내 파일 목록 출력.

형식: zip_read( zip_name );

Example #1

						
<?php
define("HABONYPHP_DIRNAME", "../");

require_once( HABONYPHP_DIRNAME . "library/zip.php");

$zip = new zip();
$list = $zip->zip_read('test.zip');

print_r($list);
?>

Zip 파일 전체(또는 부분) 해제

형식: zip_unzip( zip_name, destination, arrangement );

Example #1

Zip 파일을 전체 압축 해제합니다.

						
<?php

define("HABONYPHP_DIRNAME", "../");

require_once( HABONYPHP_DIRNAME . "library/zip.php");

// user 폴더에 해제하며, user 에 쓰기 권한이 있어야 합니다.
$zip = new zip();
$zip->zip_unzip('test.zip', './user');

?>

Example #2

Zip 파일 내 대상 파일을 부분 해제합니다.

						
<?php

define("HABONYPHP_DIRNAME", "../");

require_once( HABONYPHP_DIRNAME . "library/zip.php");

// user 폴더에 해제하며, user 에 쓰기 권한이 있어야 합니다.
$zip = new zip();
$arrangement = array('class/class.php', 'index.php', 'test.php');
$zip->zip_unzip('test.zip', './user', $arrangement);

?>

Zip 압축 파일을 만듭니다.

형식: zip_create( zip_name, physical );

Example #1

기존의 Zip 파일이 있으면 덮어 쓰고, 없으면 새로 만듭니다.

						
<?php

define("HABONYPHP_DIRNAME", "../");

require_once( HABONYPHP_DIRNAME . "library/zip.php");

// 로컬에 Zip 파일을 만들지만, 해당 폴더에 쓰기 권한이 있어야 합니다.
$zip = new zip();
$physical = array('index.php', 'class', 'image');
$zip->zip_create('test.zip', $physical);

?>

Example #2

						
<?php

define("HABONYPHP_DIRNAME", "../");

require_once(HABONYPHP_DIRNAME . "library/zip.php");

$zip = new zip();

// 로컬에 Zip 파일을 만들지만, 해당 폴더에 쓰기 권한이 있어야 합니다.
if(false !== $ftp->zip_open('test.zip', true))
{
	$physical = array('index.php', 'class', 'image');
	foreach($physical as $w)
	{
		$zip->zip_compress('test.zip', $w);
	}
}
$zip->zip_close();

?>

Zip 파일 내 파일 삭제

형식: zip_delete( original );

Example #1

						
<?php

define("HABONYPHP_DIRNAME", "../");

require_once(HABONYPHP_DIRNAME . "library/zip.php");

$zip = new zip();

if(false !== $ftp->zip_open('test.zip'))
{
	$original = array('index.php', 'class.php');
	foreach($original as $w)
	{
		$zip->zip_delete($w);
	}
}
$zip->zip_close();

?>

Zip 파일 내 파일 추가

형식: zip_put( original, newname, comment );

Example #1

ZIP 파일 내 새로운 파일을 추가 합니다.

						
<?php

define("HABONYPHP_DIRNAME", "../");

require_once(HABONYPHP_DIRNAME . "library/zip.php");

$zip = new zip();
if(false !== $ftp->zip_open('test.zip'))
{
	$original = '../user/test.php';
	$newname = 'username.php';
	$comment = '새로운 파일입니다.';

	$zip->zip_put($original, $newname, $comment);
}
$zip->zip_close();

?>

Example #2

						
<?php

define("HABONYPHP_DIRNAME", "../");

require_once(HABONYPHP_DIRNAME . "library/zip.php");

$zip = new zip();
if(false !== $ftp->zip_open('test.zip'))
{
	$original = array('../user/test.php', '../index.php');
	$newname = array('username.php', 'index.bak');
	$comment = array('새로운 파일입니다.');

	$i = 0;
	foreach($original as $q)
	{
		$zip->zip_put($q, $newname[$i], $comment[$i]);
		$i++;
	}
}
$zip->zip_close();

?>

Example #3

업로드 파일을 압축 파일에 추가합니다.

						
<?php

define("HABONYPHP_DIRNAME", "../");

require_once(HABONYPHP_DIRNAME . "library/zip.php");

$zip = new zip();
if(false !== $ftp->zip_open('test.zip'))
{
	foreach($_FILES as $q)
	{
		if( ($q['size'] > 0) && ($q['error'] === 0) )
		{
			$zip->zip_put($q['tmp_name'], $q['name']);
		}
	}
}
$zip->zip_close();

?>

Zip 파일 내 파일 다운로드

형식: zip_download( zip_name, gzip );

Example #1

						
<?php

define("HABONYPHP_DIRNAME", "../");

require_once(HABONYPHP_DIRNAME . "library/zip.php");

$zip = new zip();

// 상단에 어떤 브라우저 출력이 없어야 합니다.
$ftp->zip_download('test.zip', 'class.php');

?>

Zip 파일 내 파일 수정 업데이트

형식: zip_put_file( name, str);

Example #1

						
<?php

define("HABONYPHP_DIRNAME", "../");

require_once(HABONYPHP_DIRNAME . "library/zip.php");

$zip = new zip();

if(false !== $ftp->zip_open('test.zip'))
{
	if($zip->zip_put_file('test.php', $_POST['contents']))
	{
		if($fpath = $zip->zip_get_file('test.php'))
		{
		    $str = file_get_contents($fpath);

		    $contents = str_replace(array('<', '>', '"', '\''), array('&#60;', '&#62;', '&#34;', '&#39;'), $str);
		}
	}
}
$zip->zip_close();

?>

<form enctype="multipart/form-data" action="" method="POST">
	<textarea name="contents"><?php echo $contents; ?></textarea>
	<input type="submit" value="전송" />
</form>

원격 파일(또는 폴더) 를 Zip 압축하여 파일 만들기

형식: ftp_zip_compress( zip, local );

Example #1

						
<?php

define("HABONYPHP_DIRNAME", "../");

require_once(HABONYPHP_DIRNAME . "library/charset.php");
require_once(HABONYPHP_DIRNAME . "library/ftp.php");
require_once(HABONYPHP_DIRNAME . "library/zip.php");

$ftp = new ftp('localhost', 'username', 'password', 'port', 'timeout', 'passive', 'ssl connect');

$zip_file = tempnam(sys_get_temp_dir(), 'zip');

$zip = new zip();
if(false !== $zip->zip_open($zip_file, true))
{
	$local = array('main', 'temp', 'test.php', 'index.php');
	foreach($local as $w)
	{
		$ftp->ftp_zip_compress($zip, $w);
	}
}
$zip->zip_close();
$ftp->ftp_close();

@copy($zip_file, './username/habony.zip');

?>