코딩 스쿨 PHP

언어선택 : HTMLCSSJAVAJAVASCRIPTMYSQLSQL PHP

PHP Zip

PHP Zip : 압축 파일 처리 가이드


PHP Zip 확장은 PHP에서 ZIP 파일을 읽고 쓰는 작업을 수행할 수 있도록 지원하는 강력한 도구입니다. ZIP 파일은 여러 파일을 하나의 압축된 파일로 묶어 저장하는 형식으로, 데이터 전송 및 저장 공간 절약을 위해 널리 사용됩니다. PHP ZipArchive 클래스는 ZIP 파일의 생성, 열기, 읽기, 쓰기, 파일 추가 및 삭제 등의 기능을 제공합니다.

이 가이드는 PHP에서 ZIP 파일을 처리하는 주요 함수와 사용 방법을 설명합니다.


1. ZipArchive 클래스 소개

PHP에서 ZIP 파일을 다루기 위해서는 ZipArchive 클래스를 사용합니다. 이 클래스는 ZIP 파일을 생성하고, 파일을 추가하거나 삭제하며, 압축 해제 등의 작업을 제공합니다.


2. Zip 파일 열기와 생성

2.1 ZipArchive::open()

open() 메서드는 기존 ZIP 파일을 열거나, 새 ZIP 파일을 생성하는 데 사용됩니다.

  • 구문:

    int ZipArchive::open ( string $filename [, int $flags = 0 ] )
    
    
  • 플래그:

    • ZipArchive::CREATE: 파일이 없으면 새 ZIP 파일을 생성합니다.
    • ZipArchive::OVERWRITE: 기존 파일이 있어도 덮어씁니다.
  • 예시:

    <?php
    $zip = new ZipArchive();
    if ($zip->open('example.zip', ZipArchive::CREATE) === TRUE) {
        echo "ZIP 파일이 열렸거나 생성되었습니다.";
    } else {
        echo "ZIP 파일을 열 수 없습니다.";
    }
    $zip->close();
    ?>
    
    

2.2 ZipArchive::close()

close() 메서드는 ZIP 파일을 닫고 변경 사항을 저장합니다. ZIP 파일 작업이 끝나면 반드시 호출해야 합니다.

  • 구문:

    bool ZipArchive::close ( void )
    
    
  • 예시:

    <?php
    $zip = new ZipArchive();
    $zip->open('example.zip', ZipArchive::CREATE);
    // ZIP 작업 수행...
    $zip->close();
    ?>
    
    

3. 파일 추가

3.1 ZipArchive::addFile()

addFile() 메서드는 ZIP 파일에 파일을 추가합니다.

  • 구문:

    bool ZipArchive::addFile ( string $filename [, string $localname ] )
    
    
    • filename: 추가할 파일의 경로.
    • localname: ZIP 내에서 저장될 파일 이름. 생략하면 원래 파일 이름이 사용됩니다.
  • 예시:

    <?php
    $zip = new ZipArchive();
    if ($zip->open('example.zip', ZipArchive::CREATE) === TRUE) {
        $zip->addFile('test.txt', 'newname.txt');  // test.txt 파일을 newname.txt로 추가
        $zip->close();
        echo "파일이 ZIP에 추가되었습니다.";
    } else {
        echo "ZIP 파일을 열 수 없습니다.";
    }
    ?>
    
    

3.2 ZipArchive::addFromString()

addFromString() 메서드는 문자열 데이터를 ZIP 파일에 파일로 추가합니다.

  • 구문:

    bool ZipArchive::addFromString ( string $localname , string $contents )
    
    
    • localname: ZIP 내에서 저장될 파일 이름.
    • contents: 파일의 내용이 될 문자열.
  • 예시:

    <?php
    $zip = new ZipArchive();
    if ($zip->open('example.zip', ZipArchive::CREATE) === TRUE) {
        $zip->addFromString('info.txt', '이것은 문자열 데이터입니다.');
        $zip->close();
        echo "문자열이 ZIP 파일에 추가되었습니다.";
    } else {
        echo "ZIP 파일을 열 수 없습니다.";
    }
    ?>
    
    

4. 파일 목록 조회

4.1 ZipArchive::numFiles

numFiles 속성은 ZIP 파일에 포함된 파일의 수를 반환합니다.

  • 예시:

    <?php
    $zip = new ZipArchive();
    if ($zip->open('example.zip') === TRUE) {
        echo "ZIP 파일에 포함된 파일 수: " . $zip->numFiles;
        $zip->close();
    } else {
        echo "ZIP 파일을 열 수 없습니다.";
    }
    ?>
    
    

4.2 ZipArchive::statIndex()

statIndex() 메서드는 ZIP 파일 내의 특정 파일에 대한 정보를 반환합니다.

  • 구문:

    array ZipArchive::statIndex ( int $index [, int $flags = 0 ] )
    
    
    • index: ZIP 파일 내의 파일 인덱스.
  • 예시:

    <?php
    $zip = new ZipArchive();
    if ($zip->open('example.zip') === TRUE) {
        for ($i = 0; $i < $zip->numFiles; $i++) {
            $stat = $zip->statIndex($i);
            echo "파일 #" . $i . ": " . $stat['name'] . "<br>";
        }
        $zip->close();
    }
    ?>
    
    

5. 파일 압축 해제

5.1 ZipArchive::extractTo()

extractTo() 메서드는 ZIP 파일 내의 파일을 특정 위치에 압축 해제합니다.

  • 구문:

    bool ZipArchive::extractTo ( string $destination [, mixed $entries ] )
    
    
    • destination: 압축을 해제할 디렉토리.
    • entries: 특정 파일이나 파일 목록을 해제할 경우 지정할 수 있습니다.
  • 예시:

    <?php
    $zip = new ZipArchive();
    if ($zip->open('example.zip') === TRUE) {
        $zip->extractTo('extract_here/');  // 모든 파일을 'extract_here' 폴더에 압축 해제
        $zip->close();
        echo "압축 해제가 완료되었습니다.";
    } else {
        echo "ZIP 파일을 열 수 없습니다.";
    }
    ?>
    
    

5.2 특정 파일 압축 해제

특정 파일만 압축을 해제하려면 extractTo()에 파일 이름을 배열로 전달할 수 있습니다.

  • 예시:

    <?php
    $zip = new ZipArchive();
    if ($zip->open('example.zip') === TRUE) {
        $zip->extractTo('extract_here/', ['file1.txt', 'file2.txt']);  // 특정 파일만 압축 해제
        $zip->close();
        echo "특정 파일의 압축 해제가 완료되었습니다.";
    } else {
        echo "ZIP 파일을 열 수 없습니다.";
    }
    ?>
    
    

6. 파일 삭제

6.1 ZipArchive::deleteName()

deleteName() 메서드는 ZIP 파일 내에서 특정 파일을 삭제합니다.

  • 구문:

    bool ZipArchive::deleteName ( string $name )
    
    
    • name: ZIP 파일 내에서 삭제할 파일 이름.
  • 예시:

    <?php
    $zip = new ZipArchive();
    if ($zip->open('example.zip') === TRUE) {
        $zip->deleteName('test.txt');  // test.txt 파일 삭제
        $zip->close();
        echo "파일이 ZIP에서 삭제되었습니다.";
    } else {
        echo "ZIP 파일을 열 수 없습니다.";
    }
    ?>
    
    

7. 기타 유용한 메서드

7.1 ZipArchive::renameName()

renameName() 메서드는 ZIP 파일 내에서 파일의 이름을 변경합니다.

  • 구문:

    bool ZipArchive::renameName ( string $name , string $newname )
    
    
    • name: 변경할 파일의 기존 이름.
    • newname: 새 이름.
  • 예시:

    <?php
    $zip = new ZipArchive();
    if ($zip->open('example.zip') === TRUE) {
        $zip->renameName('oldname.txt', 'newname.txt');  // 파일 이름 변경
        $zip->close();
        echo "파일 이름이 변경되었습니다.";
    } else {
        echo "ZIP 파일을 열 수 없습니다.";
    }
    ?>
    
    

7.2 ZipArchive::getFromName()

getFromName() 메서드는 ZIP 파일 내의 특정 파일의 내용을 반환합니다.

  • 구문:

    string ZipArchive::getFromName ( string $name [, int $length = 0 [, int $flags ]] )
    
    
    • name: ZIP 파일 내에서 읽을 파일 이름.
  • length: 읽을 데이터의 길이.

  • 예시:

    <?php
    $zip = new ZipArchive();
    if ($zip->open('example.zip') === TRUE) {
        $content = $zip->getFromName('info.txt');
        echo "파일 내용: " . $content;
        $zip->close();
    } else {
        echo "ZIP 파일을 열 수 없습니다.";
    }
    ?>
    
    

요약

PHP ZipArchive 클래스는 ZIP 파일을 처리하는 강력한 도구를 제공하여, 파일을 추가하거나 삭제하고, 압축을 해제하며, ZIP 파일 내 파일을 쉽게 조작할 수 있습니다. 이를 통해 PHP는 웹 애플리케이션에서 파일을 압축하고 해제하는 기능을 손쉽게 구현할 수 있습니다.


copyright ⓒ 스타트코딩 all rights reserved.
이메일 : startcodingim@gamil.com