1. 程式人生 > >PHP擴充套件類ZipArchive簡單使用

PHP擴充套件類ZipArchive簡單使用

一、解壓縮zip檔案

<?php
$zip = new ZipArchive;//新建一個ZipArchive的物件
/* 
   通過ZipArchive的物件處理zip檔案
   $zip->open這個方法的引數表示處理的zip檔名。
   如果對zip檔案物件操作成功,$zip->open這個方法會返回TRUE
*/
if ($zip->open('test.zip') === TRUE){
    $zip->extractTo('images');//假設解壓縮到在當前路徑下images資料夾的子資料夾php
    $zip->close();//關閉處理的zip檔案
}
?>
二、將檔案壓縮成zip檔案 
<?php
$zip = new ZipArchive;
/*
$zip->open這個方法第一個引數表示處理的zip檔名。
第二個引數表示處理模式,ZipArchive::OVERWRITE表示如果zip檔案存在,就覆蓋掉原來的zip檔案。
如果引數使用ZIPARCHIVE::CREATE,系統就會往原來的zip檔案裡新增內容。
如果不是為了多次新增內容到zip檔案,建議使用ZipArchive::OVERWRITE。
使用這兩個引數,如果zip檔案不存在,系統都會自動新建。
如果對zip檔案物件操作成功,$zip->open這個方法會返回TRUE
*/
if ($zip->open('test.zip', ZipArchive::OVERWRITE) === TRUE){
    $zip->addFile('image.txt');//假設加入的檔名是image.txt,在當前路徑下
    $zip->close();
}
?>
三、檔案追加內容新增到zip檔案
<?php
$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檔案

<?php
function addFileToZip($path, $zip) {
    $handler = opendir($path); //開啟當前資料夾由$path指定。
/*
迴圈的讀取資料夾下的所有檔案和資料夾
其中$filename = readdir($handler)是每次迴圈的時候將讀取的檔名賦值給$filename,
為了不陷於死迴圈,所以還要讓$filename !== false。
一定要用!==,因為如果某個檔名如果叫'0',或者某些被系統認為是代表false,用!=就會停止迴圈
*/
    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); //呼叫方法,對要打包的根目錄進行操作,並將ZipArchive的物件傳遞給方法
    $zip->close(); //關閉處理的zip檔案
}
?>