PHP擴展類ZipArchive實現(xiàn)壓縮解壓Zip文件和文件打包下載

PHP ZipArchive 是PHP自帶的擴展類宾巍,可以輕松實現(xiàn)ZIP文件的壓縮和解壓,使用前首先要確保PHP ZIP 擴展已經(jīng)開啟淤翔,具體開啟方法就不說了,不同的平臺開啟PHP擴增的方法網(wǎng)上都有胆屿,如有疑問歡迎交流。這里整理一下常用的示例供參考偶宫。

一非迹、解壓縮zip文件

$zip = new ZipArchive;//新建一個ZipArchive的對象
/*
通過ZipArchive的對象處理zip文件
$zip->open這個方法的參數(shù)表示處理的zip文件名。
如果對zip文件對象操作成功纯趋,$zip->open這個方法會返回TRUE
*/
if ($zip->open('test.zip') === TRUE)
{
$zip->extractTo('images');//假設(shè)解壓縮到在當(dāng)前路徑下images文件夾的子文件夾php
$zip->close();//關(guān)閉處理的zip文件
}

二憎兽、將文件壓縮成zip文件

$zip = new ZipArchive;
/*
$zip->open這個方法第一個參數(shù)表示處理的zip文件名。
第二個參數(shù)表示處理模式吵冒,ZipArchive::OVERWRITE表示如果zip文件存在纯命,就覆蓋掉原來的zip文件。
如果參數(shù)使用ZIPARCHIVE::CREATE桦锄,系統(tǒng)就會往原來的zip文件里添加內(nèi)容扎附。
如果不是為了多次添加內(nèi)容到zip文件蔫耽,建議使用ZipArchive::OVERWRITE结耀。
使用這兩個參數(shù),如果zip文件不存在匙铡,系統(tǒng)都會自動新建图甜。
如果對zip文件對象操作成功,$zip->open這個方法會返回TRUE
*/
if ($zip->open('test.zip', ZipArchive::OVERWRITE) === TRUE)
{
$zip->addFile('image.txt');//假設(shè)加入的文件名是image.txt鳖眼,在當(dāng)前路徑下
$zip->close();
}

如果添加的文件跟PHP文件不是在同一路徑下黑毅,addFile函數(shù)的參數(shù)如果帶有路徑,則壓縮的文件里包含的是帶有路徑的文件壓縮钦讳,而又不希望帶有路徑矿瘦,則需要該函數(shù)的第二個參數(shù)

$zip->addFile("images/image.txt","image.txt");

三、文件追加內(nèi)容添加到zip文件

$zip = new ZipArchive;
$res = $zip->open('test.zip', ZipArchive::CREATE);
if ($res === TRUE) {
$zip->addFromString('test.txt', 'file content goes here');
$zip->close();
echo 'ok';
} else {
echo 'failed';
}

四愿卒、將文件夾打包成zip文件

function addFileToZip($path, $zip) {
    $handler = opendir($path); //打開當(dāng)前文件夾由$path指定缚去。
    /*
    循環(huán)的讀取文件夾下的所有文件和文件夾
    其中$filename = readdir($handler)是每次循環(huán)的時候?qū)⒆x取的文件名賦值給$filename,
    為了不陷于死循環(huán)琼开,所以還要讓$filename !== false易结。
    一定要用!==,因為如果某個文件名如果叫'0'柜候,或者某些被系統(tǒng)認(rèn)為是代表false搞动,用!=就會停止循環(huán)
    */
    while (($filename = readdir($handler)) !== false) {
        if ($filename != "." && $filename != "..") {//文件夾文件名字為'.'和‘..’,不要對他們進行操作
            if (is_dir($path . "/" . $filename)) {// 如果讀取的某個對象是文件夾渣刷,則遞歸
                addFileToZip($path . "/" . $filename, $zip);
            } else { //將文件加入zip對象
                $zip->addFile($path . "/" . $filename);
            }
        }
    }
    @closedir($path);
    $zip = new ZipArchive();
    if ($zip->open('images.zip', ZipArchive::OVERWRITE) === TRUE) {
    addFileToZip('images/', $zip); //調(diào)用方法鹦肿,對要打包的根目錄進行操作,并將ZipArchive的對象傳遞給方法
    $zip->close(); //關(guān)閉處理的zip文件
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末辅柴,一起剝皮案震驚了整個濱河市箩溃,隨后出現(xiàn)的幾起案子高诺,更是在濱河造成了極大的恐慌,老刑警劉巖碾篡,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件虱而,死亡現(xiàn)場離奇詭異,居然都是意外死亡开泽,警方通過查閱死者的電腦和手機牡拇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來穆律,“玉大人惠呼,你說我怎么就攤上這事÷驮牛” “怎么了剔蹋?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長辅髓。 經(jīng)常有香客問我泣崩,道長,這世上最難降的妖魔是什么洛口? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任矫付,我火速辦了婚禮,結(jié)果婚禮上第焰,老公的妹妹穿的比我還像新娘买优。我一直安慰自己,他們只是感情好挺举,可當(dāng)我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布杀赢。 她就那樣靜靜地躺著,像睡著了一般湘纵。 火紅的嫁衣襯著肌膚如雪脂崔。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天瞻佛,我揣著相機與錄音脱篙,去河邊找鬼。 笑死伤柄,一個胖子當(dāng)著我的面吹牛绊困,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播适刀,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼秤朗,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了笔喉?” 一聲冷哼從身側(cè)響起取视,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤硝皂,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后作谭,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體稽物,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年折欠,在試婚紗的時候發(fā)現(xiàn)自己被綠了贝或。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡锐秦,死狀恐怖咪奖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情酱床,我是刑警寧澤羊赵,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站扇谣,受9級特大地震影響昧捷,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜揍堕,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一料身、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧衩茸,春花似錦、人聲如沸贮泞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽啃擦。三九已至囊蓝,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間令蛉,已是汗流浹背聚霜。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留珠叔,地道東北人蝎宇。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像祷安,于是被迫代替她去往敵國和親姥芥。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,843評論 2 354

推薦閱讀更多精彩內(nèi)容