PHP 모듈인 ZipArchive를 이용해서 폴더를 ZIP 파일로 압축할 수 있는 소스다.
<?php
function dirZip($resource,$dir) {
if(filetype($dir) === 'dir') {
clearstatcache();
if($fp = @opendir($dir)) {
while(false !== ($ftmp = readdir($fp))){
if(($ftmp !== ".") && ($ftmp !== "..") && ($ftmp !== ""))
{
if(filetype($dir.'/'.$ftmp) === 'dir') {
clearstatcache();
// 디렉토리이면 생성하기
$resource->addEmptyDir($dir.'/'.$ftmp);
set_time_limit(0);
dirZip($resource,$dir.'/'.$ftmp);
} else {
// 파일이면 파일 압축하기
$resource->addFile($dir.'/'.$ftmp);
}
}
}
}
if(is_resource($fp)){
closedir($fp);
}
} else {
// 파일이면 파일 압축하기
$resource->addFile($dir);
}
} // end func
// 대상 디렉토리 (해당 디렉토리 안의 하위 디렉토리까지 압축이 된다.)
$dir = 'record';
// 압축파일 이름
$date = date('Y_m_d');
$zipfile = "/file/record_".$date.".zip";
$zip = new ZipArchive;
$res = $zip->open($zipfile, ZipArchive::CREATE);
if ($res === TRUE) {
dirZip($zip,$dir);
$zip->close();
} else {
echo $res; //오류 코드
}
?>
압축이 끝나면 file 디렉토리에 압축된 파일이 있는 것을 볼 수 있다.
혹시 내 서버에 ZipArchive 모듈이 없다면?
설치해야지모...
apt-get install php-zip
이거 하나면 버전에 맞게 알아서 모듈이 설치된다
설치 완료 후 잊지말고 아파치 재시작.