Computer >> 컴퓨터 >  >> 프로그래밍 >> PHP

PHP Zip 컨텍스트 옵션 – 암호화된 ZIP 아카이브 다루기


개요

PHP의 ZIP 확장 모듈은 zip:// 스트림 래퍼(wrapper)를 제공하여, 개발자가 일반 파일 함수로 ZIP 아카이브 내부의 파일에 직접 접근할 수 있도록 합니다. PHP 7.2.0부터는 비밀번호로 보호된(암호화된) 아카이브도 지원하며, 이때 사용할 수 있는 Zip 컨텍스트 옵션은 password 단 하나입니다.

zip:// 래퍼를 사용할 때는 zip://아카이브경로#내부파일명 형식처럼 샵(#) 기호로 아카이브 경로와 내부 파일 이름을 구분한다는 점을 기억해 두면 좋습니다.

예제

1. 비밀번호가 설정된 ZIP 아카이브 생성하기

먼저 ZipArchive 클래스를 이용해 비밀번호가 걸린 ZIP 아카이브를 다음과 같이 생성합니다.

<?php
$zip = new ZipArchive;
$zip->open('test.zip');
$zip->setPassword("MySecretPassword");
$zip->addFile('c:/xampp/php/test.txt', 'test.txt');
$zip->close();
?>

위 코드에서는 setPassword() 메서드로 아카이브 전체에 적용될 비밀번호를 지정한 뒤, addFile()로 파일을 추가하고 있습니다.

2. zip:// 스트림으로 암호화된 파일 읽기

생성된 아카이브에서 파일을 읽으려면 stream_context_create()로 컨텍스트를 만들고, password 옵션에 올바른 비밀번호를 전달해야 합니다.

<?php
$opts = array(
    'zip' => array(
        'password' => 'secret',
    ),
);
$context = stream_context_create($opts);
echo file_get_contents('zip://test.zip#test.txt', false, $context);
?>

여기서 $opts 배열은 'zip' 래퍼에 대한 설정을 담고 있으며, 그 안의 password 키에 실제 비밀번호를 지정합니다. 만들어진 컨텍스트는 file_get_contents()의 세 번째 인수로 전달되어, 암호화된 아카이브 내부의 test.txt 파일 내용을 그대로 출력하게 됩니다.