我們將一個(gè)文件生成一個(gè)壓縮包
open($filename,ZipArchive::CREATE); //打開(kāi)壓縮包 foreach($fileList as $file){ $zip->addFile($file,basename($file)); //向壓縮包中添加文件 } $zip->close(); //關(guān)閉壓縮包
ZipArchive::open第二個(gè)參數(shù)說(shuō)明:
ZipArchive::OVERWRITE
總是以一個(gè)新的壓縮包開(kāi)始,此模式下如果已經(jīng)存在則會(huì)被覆蓋。
ZipArchive::CREATE
如果不存在則創(chuàng)建一個(gè)zip壓縮包。
ZipArchive::EXCL
如果壓縮包已經(jīng)存在,則出錯(cuò)。
ZipArchive::CHECKCONS
對(duì)壓縮包執(zhí)行額外的一致性檢查,如果失敗則顯示錯(cuò)誤。
壓縮單個(gè)文件
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,如果忽略,則會(huì)多一個(gè)名為C:的文件夾 $flag = $zip->close(); echo $flag?'success':'fail'; 壓縮多個(gè)文件 $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 不帶/開(kāi)頭 * @param ZipArchive $zip */ function zipFolder($basePath, $relativePath, ZipArchive $zip) { $handler = opendir($basePath.$relativePath); //打開(kāi)當(dāng)前文件夾 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文件夾開(kāi)始 $flag = $zip->close(); echo $flag?'success':'fail';