mixed ZipArchive::open ( string $filename [, int $flags ] )
(PHP 5 >= 5.2.0, PECL zip >= 1.1.0)
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 압축 파일 해제
작성방법은 압축파일을 "오픈"하고, 원하는 위치에 압축 "해제"하고, "닫기" 순으로 작성합니다.
<?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 '압축파일을 찾을 수 없습니다.';
}
}
?>
다음은 디렉토리에 압축파일을 부분적으로 해제하도록 하겠습니다.
<?php
$zip = new ZipArchive;
$res = $zip->open('./zzz/phpzipfile.zip');
if (($res === TRUE) && (file_exists('./mail') === TRUE)) {
echo '압축파일 오픈에 성공하였습니다.';
$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 압축 파일내 Entry 얻기
압축 파일내 Entry 를 가져 오겠습니다. 가져오는 순서는 같습니다. 열기, 읽기, 닫기 순으로 작성합니다.
<?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 '압축파일을 읽을 수 없습니다.';
}
?>
Zip 압축 파일내 파일삭제
이제 부분적으로 압축 파일내 파일을 삭제해 보겠습니다.
<?php
$zip = new ZipArchive;
if ($err = $zip->open('phpzipfile.zip')){
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 '압축파일을 읽을 수 없습니다.';
}
?>
Zip 압축 파일 수정
압축 파일에 새로운 파일을 추가하거나 디렉토리를 만들 수 있습니다.
<?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) {
$zip->addFromString('dir/pear.php', $string);
$zip->addFile('test.php', 'copyfile.txt');
$zip->addFile('test.php');
$zip->addEmptyDir("user/mkdir");
$zip->renameName('PHPgoldfile.php','newname.txt');
$zip->close();
echo 'ok';
} else {
echo 'failed: '.$res;
}
?>
다음은 압축 파일내 특정 이미지 파일을 png 로 출력해 보겠습니다.
<?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로 파일을 덮어 쓰게 합니다.
<?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;
}
?>
Zip 압축 파일에 코멘트 달기
mixed ZipArchive::setCommentName ( string $name , string $comment )
(PHP 5 >= 5.2.0, PECL zip >= 1.4.0)
zip 압축 파일내 대상 파일에 설명을 붙일 수 있는 기능을 제공하는데, 다음 그림의 "설명" 부분을 보면 알 수 있듯이 필요하다면 코멘트를 남길 수 있습니다.
<?php
$zip = new ZipArchive;
$res = $zip->open('php.zip');
if ($res === TRUE) {
$zip->setCommentName('test.txt', '코멘트를 남깁니다.');
$zip->close();
echo 'ok';
} else {
echo 'error';
}
?>
이제 파일에 정상적으로 코멘트가 기록되었는지 확인해 보겠습니다.
<?php
$zip = new ZipArchive;
$res = $zip->open('php.zip');
if ($res === TRUE) {
var_dump($zip->getCommentName('test.txt'));
} else {
echo '에러 코드:' . $res;
}
?>