- 1.打開一個ZIP包,用於讀取、寫入或修改
- open(string $filename [, int $flags])
- $filename - 文件名
- $flags - 打開模式
- ZIPARCHIVE::OVERWRITE - 總是以一個新的壓縮包開始,此模式下如果已經存在則會被覆蓋
- ZIPARCHIVE::CREATE - 如果不存在則創建一個zip壓縮包
- ZIPARCHIVE::EXCL - 如果壓縮包已經存在,則出錯
- ZIPARCHIVE::CHECKCONS - 對壓縮包執行額外的一致性檢查,如果失敗則顯示錯誤
- 2.設置zip包的解壓密碼
- setPassword(string $password)
- $password - 解壓密碼
- 注意:
- 該函數,僅在解壓zip包時,設置密碼(就是一個zip包加密過,我們使用這個方法,設置解壓需要的密碼);不能將一個 '無密碼保護' 的zip包,轉變為 '密碼保護' 的zip包
- /*
- 很有必要解釋下這個函數!
- PHP的 ZipArchive 擴展,不支持:創建一個加密的zip包,只能用於解壓一個加密的壓縮包
- 所以,很多人認為這個方法應該改為 'usePassword()' !
- 不能做的幾個事:
- 1>不能創建加密的zip包
- 2>不能將其他的加密文件,添加到zip包中
- 3>不能壓縮,解壓 'AES256' 加密方法
- 4>使用 'getStatusString()',拋出可捕捉的錯誤
- */
- 3.關閉激活的zip包(已打開的或新創建的),並保存修改。在腳本結束時,會自動調用該方法
- close()
- 4.從zip包中,提取整個歸檔或給定的文件,到指定的目錄或文件(解壓)
- extractTo(string $destination [, mixed $entries])
- $destination - 提取zip包內容到目標路徑(目標)
- $entries - 提取zip包的指定文件,接收單個的條目名或多個條目組成的數組(源) --- 不指定,則提取全部!
- 5.給ZIP包添加一個空目錄
- addEmptyDir(string $dirname)
- $dirname - 目錄路徑
- 6.給ZIP包添加一個文件
- addFile(string $filename [, string $localname = NULL [, int $start = 0 [, int $length = 0]]])
- $filename - 添加的文件路徑
- $localname - 如果提供了,在ZIP包中,會以這個名字作為我們添加文件的文件名
- $start - 不使用這個參數,擴展 'ZipArchive' 需要
- $length - 不使用這個參數,擴展 'ZipArchive' 需要
- 示例:
- <?php
- $zip = new ZipArchive;
- if ($zip->open('test.zip') === TRUE) {
- $zip->addFile('/path/to/index.txt', 'newname.txt'); // index.txt在zip包的名字是newname.txt
- $zip->close();
- echo 'ok';
- } else {
- echo 'failed';
- }
- ?>
- 注意:
- 當添加文件到zip包中,php會鎖定該文件。只有當ZipArchive對象關閉了,才會釋放鎖定。可通過:ZipArchive::close()或銷毀ZipArchive對象。這導致只有鎖定被釋放,我們才能刪除該文件!
- 7.將文件的內容,添加到zip包(自然,需要我們來指定zip包中,內容應該添加到哪個文件)
- addFromString(string $localname, string $contents)
- $localname - zip包中的文件名(為了最大的可移植性,建議zip文件的目錄分隔符總是使用 '/')
- $contents - 內容字符串
- 示例:
- <?php
- $zip = new ZipArchive;
- if ($zip->open('test.zip') === TRUE) {
- $zip->addFromString('dir/test.txt', 'file content goes here');
- $zip->close();
- echo 'ok';
- } else {
- echo 'failed';
- }
- ?>
- 注意:
- 1.該函數,會覆蓋已存在的文件!
- 2.>5.4版本,會遞歸創建目錄
- 8.通過 'glob' 模式匹配,從目錄中添加匹配到的文件
- addGlob(string $pattern [, int $flags = 0 [, array $options = array()]])
- $pattern - glob 模型字符串(兩邊沒有 '/' 包圍)
- $flags - glob 標記
- $options - 選項的關聯數組,有效的選項是:
- add_path - 給匹配的文件,添加路徑前綴。在執行了 'remove_path' 和 'remove_all_path' 操作后,才執行該選項操作
- remove_path - 添加到zip包之前,將匹配的文件路徑,移除該選項指定的路徑前綴
- remove_all_path - 只能設置為true,表示刪除匹配到的文件的路徑前綴,統一添加到zip包的根目錄
- /*
- 尋找與模式匹配的文件路徑,返回匹配到的文件路徑數組
- glob(string $pattern [, int $flags = 0])
- $pattern - 模式字符串
- $flags - 有效標記有:
- GLOB_MARK - 在每個返回的項目中加一個斜線
- GLOB_NOSORT - 按照文件在目錄中出現的原始順序返回(不排序)
- GLOB_NOCHECK - 如果沒有文件匹配則返回用於搜索的模式
- GLOB_NOESCAPE - 反斜線不轉義元字符
- GLOB_BRACE - 擴充 {a,b,c} 來匹配 'a','b' 或 'c'
- GLOB_ONLYDIR - 僅返回與模式匹配的目錄項
- GLOB_ERR - 停止並讀取錯誤信息(比如說不可讀的目錄),默認的情況下忽略所有錯誤
- */
- 9.通過 'PCRE - Perl兼容正則表達式' 模式匹配,從目錄中添加匹配到的文件
- addPattern(string $pattern [, string $path = '.' [, array $options = array()]])
- $pattern - 正則表達式模式(兩邊使用 '/' 包圍)
- $path - 掃描目錄,默認是當前工作目錄
- $options - 選項的關聯數組,有效的選項是:
- add_path - 給匹配的文件,添加路徑前綴。在執行了 'remove_path' 和 'remove_all_path' 操作后,才執行該選項操作
- remove_path - 添加到zip包之前,將匹配的文件路徑,移除該選項指定的路徑前綴
- remove_all_path - 只能設置為true,表示刪除匹配到的文件的路徑前綴,統一添加到zip包的根目錄
- 10.在zip包內,通過文件索引,刪除指定文件
- deleteIndex(int $index)
- $index - 要刪除的文件索引
- 11.在zip包內,通過文件名,刪除指定文件
- deleteName(string $name)
- $name - 要刪除的文件名
- 示例:
- <?php
- $zip = new ZipArchive;
- if ($zip->open('test1.zip') === TRUE) {
- $zip->deleteName('testfromfile.php');
- $zip->deleteName('testDir/');
- $zip->close();
- echo 'ok';
- } else {
- echo 'failed';
- }
- ?>
- 12.通過條目名稱,得到條目索引
- locateName(string $name [, int $flags])
- $name - 要查找的條目名稱
- $flags - 如何查找,可以事下面2個中的一個,或者設置為 0 - 表示2者都不
- 0
- ZipArchive::FL_NOCASE
- ZipArchive::FL_NODIR
- 13.通過條目索引,獲取條目名稱
- getNameIndex(int $index [, int $flags])
- $index - 條目索引
- $flags - 標志
- 設置為 'ZipArchive::FL_UNCHANGED',返回原始的未改變過的注釋
- 14.通過條目索引,獲取條目的相關信息
- statIndex(int $index [, int $flags])
- $index - 條目索引
- $flags - 標志
- 設置為 'ZipArchive::FL_UNCHANGED',請求原始文件的信息,忽略所有的修改
- 15.通過條目名稱,獲取條目的相關信息
- statName(string $name [, int $flags])
- $name - 條目名稱
- $flags - 指定如何進行名稱查找。設置為 'ZipArchive::FL_UNCHANGED',請求原始文件的信息,忽略所有的修改
- ZipArchive::FL_NOCASE
- ZipArchive::FL_NODIR
- ZipArchive::FL_UNCHANGED
- 16.通過條目索引,重命名條目
- renameIndex(int $index, string $newname)
- $index - 要重命名的條目索引
- $newname - 新名稱
- 17.通過條目名稱,重命名條目
- renameName(string $name, string $newname)
- $name - 要重命名的條目名稱
- $newname - 新名稱
- 18.通過條目索引,獲取條目內容
- getFromIndex(int $index [, int $length = 0 [, int $flags]])
- $index - 條目索引
- $length - 從條目中讀取的字節長度。設置為0,表示讀取全部
- $flags - 打開條目的方式
- ZipArchive::FL_UNCHANGED
- ZipArchive::FL_COMPRESSED
- 19.通過條目名稱,獲取條目內容
- getFromName(string $name [, int $length = 0 [, int $flags]])
- $name - 條目名稱
- $length - 從條目中讀取的字節長度。設置為0,表示讀取全部
- $flags - 查找條目的方法。。。(同上面不一樣,上面是:打開條目的方式)
- ZipArchive::FL_UNCHANGED
- ZipArchive::FL_COMPRESSED
- ZipArchive::FL_NOCASE
- 20.在zip包中,通過條目索引,設置條目的壓縮方法
- setCompressionIndex(int $index, int $comp_method [, int $comp_flags = 0])
- $index - 條目索引
- $comp_method - 壓縮方法。可以是ZipArchive::CM_DEFAULT、ZipArchive::CM_STORE或ZipArchive::CM_DEFLATE
- $comp_flags - 壓縮標志。目前未使用
- 21.在zip包中,通過條目名稱,設置條目的壓縮方法
- setCompressionName(string $name, int $comp_method [, int $comp_flags = 0])
- $name - 條目名稱
- $comp_method - 壓縮方法。可以是ZipArchive::CM_DEFAULT、ZipArchive::CM_STORE或ZipArchive::CM_DEFLATE
- $comp_flags - 壓縮標志。目前未使用
- 22.獲取錯誤信息、系統信息或zip信息
- getStatusString()
- 23.通過條目名稱,得到條目的一個文件處理句柄(file handler),目前只支持 '可讀'
- getStream(string $name)
- $name - 條目名稱
- 24.給zip包設置注釋
- setArchiveComment(string $comment)
- $comment - 注釋內容
- 25.獲取zip包注釋
- getArchiveComment([int $flags])
- $flags - 標志
- 設置為 'ZipArchive::FL_UNCHANGED',返回原始的未改變過的注釋
- 26.在zip包中,通過條目索引,給條目設置注釋
- setCommentIndex(int $index, string $comment)
- $index - 條目索引
- $comment - 注釋內容
- 27.通過條目索引,返回指定條目的注釋
- getCommentIndex(int $index [, int $flags])
- $index - 條目索引
- $flags - 標志
- 設置為 'ZipArchive::FL_UNCHANGED',返回原始的未改變過的注釋
- 28.在zip包中,通過條目名稱,給條目設置注釋
- setCommentName(string $name, string $comment)
- $name - 條目名稱
- $comment - 注釋內容
- 29.通過條目名稱,返回指定條目的注釋
- getCommentName(string $name [, int $flags])
- $name - 條目名稱
- $flags - 標志
- 設置為 'ZipArchive::FL_UNCHANGED',返回原始的未改變過的注釋
- 30.在zip包中,通過條目索引,給條目設置額外的屬性
- setExternalAttributesIndex(int $index, int $opsys, int $attr [, int $flags])
- $index - 條目索引
- $opsys - ZipArchive::OPSYS_xx 定義的操作系統碼
- $attr - 額外的屬性。屬性值取決於操作系統
- $flags - 可選的標志。目前未使用
- 31.通過條目索引,檢索條目額外的屬性
- getExternalAttributesIndex(int $index, int &$opsys, int &attr [, int $flags])
- $index - 條目索引
- &$opsys - 成功,返回ZipArchive::OPSYS_xx 定義的操作系統碼 - 注意是 '&-引用變量,會接收值'
- &$attr - 成功,返回額外的屬性。屬性值取決於操作系統 - 注意是 '&-引用變量,會接收值'
- $flags - 標志
- 設置為 'ZipArchive::FL_UNCHANGED',返回原始的未改變過的注釋
- 32.在zip包中,通過條目名稱,給條目設置額外的屬性
- setExternalAttributesName(string $name, int $opsys, int $attr [, int $flags])
- $name - 條目名稱
- $opsys - ZipArchive::OPSYS_xx 定義的操作系統碼
- $attr - 額外的屬性。屬性值取決於操作系統
- $flags - 可選的標志。目前未使用
- 33.通過條目名稱,檢索條目額外的屬性
- getExternalAttributesName(string $name, int &$opsys, int &attr [, int $flags])
- $name - 條目名稱
- &$opsys - 成功,返回ZipArchive::OPSYS_xx 定義的操作系統碼 - 注意是 '&-引用變量,會接收值'
- &$attr - 成功,返回額外的屬性。屬性值取決於操作系統 - 注意是 '&-引用變量,會接收值'
- $flags - 標志
- 設置為 'ZipArchive::FL_UNCHANGED',返回原始的未改變過的注釋
- 34.撤銷zip包的所有改變
- unchangeAll()
- 35.撤銷zip包的所有全局改變,當前,只針對 'comment - 注釋'
- unchangeArchive()
- 36.通過條目索引,撤銷指定條目的所有改變
- unchangeIndex(int $index)
- $index - 條目索引
- 37.通過條目名稱,撤銷指定條目的所有改變
- unchangeName(string $name)
- $name - 條目名稱
- 38.ZipArchive 使用的類常量。 有以下三類常量:Flags(以 FL_ 為前綴),errors(以 ER_ 為前綴)以及 mode(沒有前綴)。
- ZIPARCHIVE::CREATE (integer) - 如果不存在則創建一個zip壓縮包。
- ZIPARCHIVE::OVERWRITE (integer) - 總是以一個新的壓縮包開始,此模式下如果已經存在則會被覆蓋。
- ZIPARCHIVE::EXCL (integer) - 如果壓縮包已經存在,則出錯。
- ZIPARCHIVE::CHECKCONS (integer) - 對壓縮包執行額外的一致性檢查,如果失敗則顯示錯誤。
- ZIPARCHIVE::FL_NOCASE (integer) - 查找時忽略名稱的大小寫。
- ZIPARCHIVE::FL_NODIR (integer) - 忽略目錄部分
- ZIPARCHIVE::FL_COMPRESSED (integer) - 讀取壓縮數據
- ZIPARCHIVE::FL_UNCHANGED (integer) - 使用原始數據,忽略更改。
- ZIPARCHIVE::CM_DEFAULT (integer) - 更好的壓縮或存儲。
- ZIPARCHIVE::CM_STORE (integer) - 存儲(不壓縮)。
- ZIPARCHIVE::CM_SHRINK (integer) - 收縮
- ZIPARCHIVE::CM_REDUCE_1 (integer) - 用因子1換算
- ZIPARCHIVE::CM_REDUCE_2 (integer) - 用因子2換算
- ZIPARCHIVE::CM_REDUCE_3 (integer) - 用因子3換算
- ZIPARCHIVE::CM_REDUCE_4 (integer) - 用因子4換算
- ZIPARCHIVE::CM_IMPLODE (integer) - 聚爆
- ZIPARCHIVE::CM_DEFLATE (integer) - deflated
- ZIPARCHIVE::CM_DEFLATE64 (integer) - deflate64
- ZIPARCHIVE::CM_PKWARE_IMPLODE (integer) - PKWARE imploding
- ZIPARCHIVE::CM_BZIP2 (integer) - BZIP2算法
- ZIPARCHIVE::ER_OK (integer) - 沒有錯誤。
- ZIPARCHIVE::ER_MULTIDISK (integer) - 不支持多磁盤zip壓縮包。
- ZIPARCHIVE::ER_RENAME (integer) - 重命名臨時文件失敗。
- ZIPARCHIVE::ER_CLOSE (integer) - 關閉zip壓縮包失敗。
- ZIPARCHIVE::ER_SEEK (integer) - 尋址錯誤
- ZIPARCHIVE::ER_READ (integer) - 讀取錯誤
- ZIPARCHIVE::ER_WRITE (integer) - 寫入錯誤
- ZIPARCHIVE::ER_CRC (integer) - CRC校驗失敗
- ZIPARCHIVE::ER_ZIPCLOSED (integer) - zip壓縮包已關閉
- ZIPARCHIVE::ER_NOENT (integer) - 沒有文件
- ZIPARCHIVE::ER_EXISTS (integer) - 文件已經存在
- ZIPARCHIVE::ER_OPEN (integer) - 不能打開文件
- ZIPARCHIVE::ER_TMPOPEN (integer) - 創建臨時文件失敗
- ZIPARCHIVE::ER_ZLIB (integer) - Zlib錯誤
- ZIPARCHIVE::ER_MEMORY (integer) - 內存分配失敗
- ZIPARCHIVE::ER_CHANGED (string) - 條目已被改變
- ZIPARCHIVE::ER_COMPNOTSUPP (integer) - 不支持的壓縮方式
- ZIPARCHIVE::ER_EOF (integer) - 過早的EOF
- ZIPARCHIVE::ER_INVAL (integer) - 無效的參數
- ZIPARCHIVE::ER_NOZIP (integer) - 不是一個zip壓縮包
- ZIPARCHIVE::ER_INTERNAL (integer) - Internal error
- ZIPARCHIVE::ER_INCONS (integer) - Zip壓縮包不一致
- ZIPARCHIVE::ER_REMOVE (integer) - 不能移除文件
- ZIPARCHIVE::ER_DELETED (integer) - 條目已被刪除