我們將一個文件生成一個壓縮包
open($filename,ZipArchive::CREATE); //打開壓縮包
foreach($fileList as $file){
$zip->addFile($file,basename($file)); //向壓縮包中添加文件
}
$zip->close(); //關(guān)閉壓縮包ZipArchive::open第二個參數(shù)說明:
ZipArchive::OVERWRITE
總是以一個新的壓縮包開始,此模式下如果已經(jīng)存在則會被覆蓋。
ZipArchive::CREATE
如果不存在則創(chuàng)建一個zip壓縮包。
ZipArchive::EXCL
如果壓縮包已經(jīng)存在,則出錯。
ZipArchive::CHECKCONS
對壓縮包執(zhí)行額外的一致性檢查,如果失敗則顯示錯誤。
壓縮單個文件
new ZipArchive();
$flag = $zip->open('C:/out.zip', ZipArchive::OVERWRITE);
if($flag!==true){
echo "open error code: {$flag}\n";
exit();
}
$zip->addFile('C:/1.txt', '1.txt'); //zip文件中的文件名為1.txt,如果忽略,則會多一個名為C:的文件夾
$flag = $zip->close();
echo $flag?'success':'fail';
壓縮多個文件
$zip = new ZipArchive();
$flag = $zip->open('C:/out.zip', ZipArchive::OVERWRITE);
if($flag!==true){
echo "open error code: {$flag}\n";
exit();
}
$zip->addFile('C:/1.txt', '1.txt');
$zip->addFile('C:/2.txt', '2.txt');
$flag = $zip->close();
echo $flag?'success':'fail';添加文件到壓縮包
如果存在壓縮包,則添加;若不存在,則新建
$zip = new ZipArchive();
$flag = $zip->open('C:/out.zip', ZipArchive::CREATE);
if($flag!==true){
echo "open error code: {$flag}\n";
exit();
}
$zip->addFile('C:/2.txt', 'folder/2.txt');
$flag = $zip->close();
echo $flag?'success':'fail';
壓縮文件夾
/**
* @param string $basePath 帶/結(jié)尾
* @param string $relativePath 不帶/開頭
* @param ZipArchive $zip
*/
function zipFolder($basePath, $relativePath, ZipArchive $zip)
{
$handler = opendir($basePath.$relativePath); //打開當前文件夾
while(($filename = readdir($handler))!==false){
if($filename!='.' && $filename!='..'){
if(is_dir($basePath.$relativePath.'/'.$filename))
zipFolder($basePath, $relativePath.'/'.$filename, $zip);
else
$zip->addFile($basePath.$relativePath.'/'.$filename, $relativePath.'/'.$filename);
}
}
closedir($handler);
}
$zip = new ZipArchive();
$flag = $zip->open('C:/out.zip', ZipArchive::OVERWRITE);
if($flag!==true){
echo "open error code: {$flag}\n";
exit();
}
zipFolder('C:/', 'test', $zip); //壓縮文件夾C:/test,并且壓縮包以test文件夾開始
$flag = $zip->close();
echo $flag?'success':'fail';



