pclzip:強大PHP壓縮解壓類使用教程

來源:互聯網
上載者:User
當你購買的虛擬機器主機不支援zip_open(),
也不支援new ZipArchive(),
那就更別想它會支援exec(),dl()……
但是gzopen()總是會支援的。

PHP壓縮解壓類pclzip只要伺服器支援gzopen就可以實現壓縮與解壓。

PclZip介紹
PclZip library能夠壓縮與解壓縮Zip格式的壓縮檔(WinZip、PKZIP);且能對此類類檔案進行處理,包括產生壓縮檔、列出壓縮檔的內容以及解壓縮檔案等等。由於能夠在伺服器端進行壓縮與解壓縮的動作,所以相當方便使用。
PclZip定義一個PclZip類別,其類別物件可視為一個ZIP檔案,亦提供method來進行處理。

如何使用PclZip
1.基礎
所有的功能都由pclzip.lib.php這個檔案提供,PclZip library可於其首頁(www.phpconcept.net/pclzip/index.en.php)下載。所有的PKZIP檔案其實就是一個PclZip的類別物件。當產生一個PclZip檔案(ie, PclZip類別物件),就會先產生一個壓縮檔,且檔名已經指定,但此壓縮檔的內容尚未存在:

< ?PHPrequire_once('pclzip.lib.php');$archive = new PclZip("archive.zip");?>


此物件提供了一些public method可用來處理此檔案。

2.參數
每一個method有其各自可使用的參數,包括有必須與非必須的參數:

< ?PHPrequire_once('pclzip.lib.php');$archive = new PclZip('archive.zip');$v_list = $archive->add('dev/file.txt',PCLZIP_OPT_REMOVE_PATH, 'dev');?>

上例中的'dev/file.txt'就是必須參數;'PCLZIP_OPT_REMOVE_PATH'則為非必須參數。當然有些method也可以只包含非必須的參數:

< ?PHP$list = $archive->extract(PCLZIP_OPT_PATH, "folder",PCLZIP_OPT_REMOVE_PATH, "data",PCLZIP_CB_PRE_EXTRACT, "callback_pre_extract",);?>

上例中原本壓縮檔內檔案存放的路徑為/data,不過你可以指定解壓縮至/folder中。此外,在解壓縮之前,會呼叫callback function('callback_pre_extract()'),此function可讓使用者在解壓縮的過程中變更檔案存放路徑與檔名,或是選擇某些檔案不解壓縮。
所有可用的非必要參數可參考網址(www.phpconcept.net/pclzip/man/en/index.php)。

3.回傳值
每個method所回傳的值可能會不同,將會在每個method中說明。不過大部分的method回傳0、error或是陣列。

4.錯誤處理
從版本1.3之後,錯誤處理已經整合至PclZip類別中,當一個method回傳錯誤碼,可以得知一些額外的訊息以方便錯誤處理:
* errorName():回傳錯誤名稱
* errorCode():回傳錯誤碼
* errorInfo():回傳錯誤的描述

接下來會舉幾個例子來說明如何使用PclZip。

PclZip執行個體1、產生ZIP壓縮檔
PclZip($zipname):為PclZip constructor,$zipname為PKZIP壓縮檔的檔名。
主要是產生一個PclZip物件,即一個PKZIP壓縮檔;但此時,只有壓縮檔產生出來,並做一些檢查(例如是否有開啟zlib extension...等),除此之外,並沒有做其他動作。
create($filelist, [optional arguments list]):將參數$filelist指定的檔案或目錄(包含當中所有檔案與子目錄)加入上述所產生的壓縮檔中。
而非必要的參數則能夠修改壓縮檔內的檔案存放路徑。
此method可用的參數可以參考網誌(www.phpconcept.net/pclzip/man/en/index.php)。

下面的樣本說明如何產生PKZIP壓縮檔(檔名為archive.zip),並將file.txt、data/text.txt以及目錄folder(包含當中的檔案與子目錄)加入剛剛產生的archive.zip中:

< ?PHPinclude_once('pclzip.lib.php');$archive = new PclZip('archive.zip');$v_list = $archive->create('file.txt,data/text.txt,folder');if ($v_list == 0) {die("Error : ".$archive->errorInfo(true));}?>


下面的樣本說明基本上與上例一樣產生archive.zip,但在將file.txt與text.txt壓縮於其中時,將路徑由data/改為install/ ;因此,在archive.zip中這兩個檔案的路徑會是install/file.txt與install/text.txt

< ?PHPinclude_once('pclzip.lib.php');$archive = new PclZip('archive.zip');$v_list = $archive->create('data/file.txt,data/text.txt',PCLZIP_OPT_REMOVE_PATH, 'data',PCLZIP_OPT_ADD_PATH, 'install');if ($v_list == 0) {die("Error : ".$archive->errorInfo(true));}?>

PclZip執行個體2、列出壓縮檔內容
listContent( ) :列出壓縮檔中的內容,包括檔案的屬性與目錄:

< ?PHPinclude_once('pclzip.lib.php');$zip = new PclZip("test.zip");if (($list = $zip->listContent()) == 0) {die("Error : ".$zip->errorInfo(true));}for ($i=0; $i";}echo "
";}?>


上例將會回傳結果:
File 0 / [filename] = data/file1.txt
File 0 / [stored_filename] = data/file1.txt
File 0 / [size] = 53
File 0 / [compressed_size] = 36
File 0 / [mtime] = 1010440428
File 0 / [comment] =
File 0 / [folder] = 0
File 0 / [index] = 0
File 0 / [status] = ok

File 1 / [filename] = data/file2.txt
File 1 / [stored_filename] = data/file2.txt
File 1 / [size] = 54
File 1 / [compressed_size] = 53
File 1 / [mtime] = 1011197724
File 1 / [comment] =
File 1 / [folder] = 0
File 1 / [index] = 1
File 1 / [status] = ok

PclZip執行個體3、解壓縮檔案
extract([options list]) :解壓縮PKZIP中的檔案或目錄。
[options list]可用的參數可參考網址(www.phpconcept.net/pclzip/man/en/index.php)。這些參數能讓使用者在解壓縮的時候有更多的選項,譬如指定變更解壓縮檔案的路徑、指定只解壓縮某些檔案或不解壓縮某些檔案或者是將檔案解壓縮成字串輸出(可用於readme檔)。

下例是一個簡單的解壓縮檔案樣本,將壓縮檔archive.zip內的檔案解壓縮至目前的目錄:

< ?PHPrequire_once('pclzip.lib.php');$archive = new PclZip('archive.zip');if ($archive->extract() == 0) {die("Error : ".$archive->errorInfo(true));}?>


下例是進階的解壓縮檔案使用,archive.zip中所有檔案都解壓縮於data/中,而特別指明在install/release中的所有檔案也直接丟於data/中,而非data/install/ release:

< ?PHPinclude('pclzip.lib.php');$archive = new PclZip('archive.zip');if ($archive->extract(PCLZIP_OPT_PATH, 'data',PCLZIP_OPT_REMOVE_PATH, 'install/release') == 0) {die("Error : ".$archive->errorInfo(true));}?>

官網:http://www.phpconcept.net/pclzip/pclzip-downloads

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.