PHP的zip、unzip類詳解


  1. 1.打開一個ZIP包,用於讀取、寫入或修改  
  2.     open(string $filename [, int $flags])   
  3.         $filename - 文件名  
  4.         $flags - 打開模式  
  5.             ZIPARCHIVE::OVERWRITE - 總是以一個新的壓縮包開始,此模式下如果已經存在則會被覆蓋  
  6.             ZIPARCHIVE::CREATE - 如果不存在則創建一個zip壓縮包  
  7.             ZIPARCHIVE::EXCL - 如果壓縮包已經存在,則出錯  
  8.             ZIPARCHIVE::CHECKCONS - 對壓縮包執行額外的一致性檢查,如果失敗則顯示錯誤  
  9.   
  10. 2.設置zip包的解壓密碼  
  11.     setPassword(string $password)  
  12.         $password - 解壓密碼  
  13.     注意:  
  14.         該函數,僅在解壓zip包時,設置密碼(就是一個zip包加密過,我們使用這個方法,設置解壓需要的密碼);不能將一個 '無密碼保護' 的zip包,轉變為 '密碼保護' 的zip包  
  15.     /*  
  16.         很有必要解釋下這個函數!  
  17.         PHP的 ZipArchive 擴展,不支持:創建一個加密的zip包,只能用於解壓一個加密的壓縮包  
  18.         所以,很多人認為這個方法應該改為 'usePassword()' !  
  19.         不能做的幾個事:  
  20.             1>不能創建加密的zip包  
  21.             2>不能將其他的加密文件,添加到zip包中  
  22.             3>不能壓縮,解壓 'AES256' 加密方法  
  23.             4>使用 'getStatusString()',拋出可捕捉的錯誤  
  24.      */  
  25.   
  26. 3.關閉激活的zip包(已打開的或新創建的),並保存修改。在腳本結束時,會自動調用該方法  
  27.     close()  
  28.   
  29. 4.從zip包中,提取整個歸檔或給定的文件,到指定的目錄或文件(解壓)  
  30.     extractTo(string $destination [, mixed $entries])  
  31.         $destination - 提取zip包內容到目標路徑(目標)  
  32.         $entries - 提取zip包的指定文件,接收單個的條目名或多個條目組成的數組(源) --- 不指定,則提取全部!  
  33.   
  34. 5.給ZIP包添加一個空目錄  
  35.     addEmptyDir(string $dirname)  
  36.         $dirname - 目錄路徑  
  37.   
  38. 6.給ZIP包添加一個文件  
  39.     addFile(string $filename [, string $localname = NULL [, int $start = 0 [, int $length = 0]]])  
  40.         $filename - 添加的文件路徑  
  41.         $localname - 如果提供了,在ZIP包中,會以這個名字作為我們添加文件的文件名  
  42.         $start - 不使用這個參數,擴展 'ZipArchive' 需要  
  43.         $length - 不使用這個參數,擴展 'ZipArchive' 需要  
  44.     示例:  
  45.         <?php  
  46.         $zip = new ZipArchive;  
  47.         if ($zip->open('test.zip') === TRUE) {  
  48.             $zip->addFile('/path/to/index.txt', 'newname.txt');      // index.txt在zip包的名字是newname.txt  
  49.             $zip->close();  
  50.             echo 'ok';  
  51.         } else {  
  52.             echo 'failed';  
  53.         }  
  54.         ?>  
  55.     注意:  
  56.         當添加文件到zip包中,php會鎖定該文件。只有當ZipArchive對象關閉了,才會釋放鎖定。可通過:ZipArchive::close()或銷毀ZipArchive對象。這導致只有鎖定被釋放,我們才能刪除該文件!  
  57.   
  58. 7.將文件的內容,添加到zip包(自然,需要我們來指定zip包中,內容應該添加到哪個文件)  
  59.     addFromString(string $localname, string $contents)  
  60.         $localname - zip包中的文件名(為了最大的可移植性,建議zip文件的目錄分隔符總是使用 '/')  
  61.         $contents - 內容字符串  
  62.     示例:  
  63.         <?php  
  64.         $zip = new ZipArchive;  
  65.         if ($zip->open('test.zip') === TRUE) {  
  66.             $zip->addFromString('dir/test.txt', 'file content goes here');  
  67.             $zip->close();  
  68.             echo 'ok';  
  69.         } else {  
  70.             echo 'failed';  
  71.         }  
  72.         ?>  
  73.     注意:  
  74.         1.該函數,會覆蓋已存在的文件!  
  75.         2.>5.4版本,會遞歸創建目錄  
  76.   
  77. 8.通過 'glob' 模式匹配,從目錄中添加匹配到的文件  
  78.     addGlob(string $pattern [, int $flags = 0 [, array $options = array()]])  
  79.         $pattern - glob 模型字符串(兩邊沒有 '/' 包圍)  
  80.         $flags - glob 標記  
  81.         $options - 選項的關聯數組,有效的選項是:  
  82.             add_path - 給匹配的文件,添加路徑前綴。在執行了 'remove_path' 和 'remove_all_path' 操作后,才執行該選項操作  
  83.             remove_path - 添加到zip包之前,將匹配的文件路徑,移除該選項指定的路徑前綴  
  84.             remove_all_path - 只能設置為true,表示刪除匹配到的文件的路徑前綴,統一添加到zip包的根目錄  
  85.   
  86.     /*  
  87.         尋找與模式匹配的文件路徑,返回匹配到的文件路徑數組  
  88.         glob(string $pattern [, int $flags = 0])  
  89.             $pattern - 模式字符串  
  90.             $flags - 有效標記有:  
  91.                 GLOB_MARK - 在每個返回的項目中加一個斜線  
  92.                 GLOB_NOSORT - 按照文件在目錄中出現的原始順序返回(不排序)  
  93.                 GLOB_NOCHECK - 如果沒有文件匹配則返回用於搜索的模式  
  94.                 GLOB_NOESCAPE - 反斜線不轉義元字符  
  95.                 GLOB_BRACE - 擴充 {a,b,c} 來匹配 'a','b' 或 'c'  
  96.                 GLOB_ONLYDIR - 僅返回與模式匹配的目錄項  
  97.                 GLOB_ERR - 停止並讀取錯誤信息(比如說不可讀的目錄),默認的情況下忽略所有錯誤  
  98.      */  
  99.   
  100. 9.通過 'PCRE - Perl兼容正則表達式' 模式匹配,從目錄中添加匹配到的文件  
  101.     addPattern(string $pattern [, string $path = '.' [, array $options = array()]])  
  102.         $pattern - 正則表達式模式(兩邊使用 '/' 包圍)  
  103.         $path - 掃描目錄,默認是當前工作目錄  
  104.         $options - 選項的關聯數組,有效的選項是:  
  105.             add_path - 給匹配的文件,添加路徑前綴。在執行了 'remove_path' 和 'remove_all_path' 操作后,才執行該選項操作  
  106.             remove_path - 添加到zip包之前,將匹配的文件路徑,移除該選項指定的路徑前綴  
  107.             remove_all_path - 只能設置為true,表示刪除匹配到的文件的路徑前綴,統一添加到zip包的根目錄  
  108.   
  109. 10.在zip包內,通過文件索引,刪除指定文件  
  110.     deleteIndex(int $index)  
  111.         $index - 要刪除的文件索引  
  112.   
  113. 11.在zip包內,通過文件名,刪除指定文件  
  114.     deleteName(string $name)  
  115.         $name - 要刪除的文件名  
  116.     示例:  
  117.         <?php  
  118.         $zip = new ZipArchive;  
  119.         if ($zip->open('test1.zip') === TRUE) {  
  120.             $zip->deleteName('testfromfile.php');  
  121.             $zip->deleteName('testDir/');  
  122.             $zip->close();  
  123.             echo 'ok';  
  124.         } else {  
  125.             echo 'failed';  
  126.         }  
  127.         ?>  
  128.   
  129. 12.通過條目名稱,得到條目索引  
  130.     locateName(string $name [, int $flags])  
  131.         $name - 要查找的條目名稱  
  132.         $flags - 如何查找,可以事下面2個中的一個,或者設置為 0 - 表示2者都不  
  133.             0  
  134.             ZipArchive::FL_NOCASE  
  135.             ZipArchive::FL_NODIR  
  136.   
  137. 13.通過條目索引,獲取條目名稱  
  138.     getNameIndex(int $index [, int $flags])  
  139.         $index - 條目索引  
  140.         $flags - 標志  
  141.             設置為 'ZipArchive::FL_UNCHANGED',返回原始的未改變過的注釋  
  142.   
  143. 14.通過條目索引,獲取條目的相關信息  
  144.     statIndex(int $index [, int $flags])  
  145.         $index - 條目索引  
  146.         $flags - 標志  
  147.             設置為 'ZipArchive::FL_UNCHANGED',請求原始文件的信息,忽略所有的修改  
  148.   
  149. 15.通過條目名稱,獲取條目的相關信息  
  150.     statName(string $name [, int $flags])  
  151.         $name - 條目名稱  
  152.         $flags - 指定如何進行名稱查找。設置為 'ZipArchive::FL_UNCHANGED',請求原始文件的信息,忽略所有的修改  
  153.             ZipArchive::FL_NOCASE  
  154.             ZipArchive::FL_NODIR  
  155.             ZipArchive::FL_UNCHANGED  
  156.   
  157. 16.通過條目索引,重命名條目  
  158.     renameIndex(int $index, string $newname)  
  159.         $index - 要重命名的條目索引  
  160.         $newname - 新名稱  
  161.   
  162. 17.通過條目名稱,重命名條目  
  163.     renameName(string $name, string $newname)  
  164.         $name - 要重命名的條目名稱  
  165.         $newname - 新名稱  
  166.   
  167. 18.通過條目索引,獲取條目內容  
  168.     getFromIndex(int $index [, int $length = 0 [, int $flags]])  
  169.         $index - 條目索引  
  170.         $length - 從條目中讀取的字節長度。設置為0,表示讀取全部  
  171.         $flags - 打開條目的方式  
  172.             ZipArchive::FL_UNCHANGED  
  173.             ZipArchive::FL_COMPRESSED  
  174.   
  175. 19.通過條目名稱,獲取條目內容  
  176.     getFromName(string $name [, int $length = 0 [, int $flags]])  
  177.         $name - 條目名稱  
  178.         $length - 從條目中讀取的字節長度。設置為0,表示讀取全部  
  179.         $flags - 查找條目的方法。。。(同上面不一樣,上面是:打開條目的方式)  
  180.             ZipArchive::FL_UNCHANGED  
  181.             ZipArchive::FL_COMPRESSED  
  182.             ZipArchive::FL_NOCASE  
  183.   
  184. 20.在zip包中,通過條目索引,設置條目的壓縮方法  
  185.     setCompressionIndex(int $index, int $comp_method [, int $comp_flags = 0])  
  186.         $index - 條目索引  
  187.         $comp_method - 壓縮方法。可以是ZipArchive::CM_DEFAULT、ZipArchive::CM_STORE或ZipArchive::CM_DEFLATE  
  188.         $comp_flags - 壓縮標志。目前未使用  
  189.   
  190. 21.在zip包中,通過條目名稱,設置條目的壓縮方法  
  191.     setCompressionName(string $name, int $comp_method [, int $comp_flags = 0])  
  192.         $name - 條目名稱  
  193.         $comp_method - 壓縮方法。可以是ZipArchive::CM_DEFAULT、ZipArchive::CM_STORE或ZipArchive::CM_DEFLATE  
  194.         $comp_flags - 壓縮標志。目前未使用  
  195.   
  196. 22.獲取錯誤信息、系統信息或zip信息  
  197.     getStatusString()  
  198.   
  199. 23.通過條目名稱,得到條目的一個文件處理句柄(file handler),目前只支持 '可讀'  
  200.     getStream(string $name)  
  201.         $name - 條目名稱  
  202.   
  203.   
  204. 24.給zip包設置注釋  
  205.     setArchiveComment(string $comment)  
  206.         $comment - 注釋內容  
  207.   
  208. 25.獲取zip包注釋  
  209.     getArchiveComment([int $flags])  
  210.         $flags - 標志  
  211.             設置為 'ZipArchive::FL_UNCHANGED',返回原始的未改變過的注釋  
  212.   
  213. 26.在zip包中,通過條目索引,給條目設置注釋  
  214.     setCommentIndex(int $index, string $comment)  
  215.         $index - 條目索引  
  216.         $comment - 注釋內容  
  217.   
  218. 27.通過條目索引,返回指定條目的注釋  
  219.     getCommentIndex(int $index [, int $flags])  
  220.         $index - 條目索引  
  221.         $flags - 標志  
  222.             設置為 'ZipArchive::FL_UNCHANGED',返回原始的未改變過的注釋  
  223.   
  224. 28.在zip包中,通過條目名稱,給條目設置注釋  
  225.     setCommentName(string $name, string $comment)  
  226.         $name - 條目名稱  
  227.         $comment - 注釋內容  
  228.   
  229. 29.通過條目名稱,返回指定條目的注釋  
  230.     getCommentName(string $name [, int $flags])  
  231.         $name - 條目名稱  
  232.         $flags - 標志  
  233.             設置為 'ZipArchive::FL_UNCHANGED',返回原始的未改變過的注釋  
  234. 30.在zip包中,通過條目索引,給條目設置額外的屬性  
  235.     setExternalAttributesIndex(int $index, int $opsys, int $attr [, int $flags])  
  236.         $index - 條目索引  
  237.         $opsys - ZipArchive::OPSYS_xx 定義的操作系統碼  
  238.         $attr - 額外的屬性。屬性值取決於操作系統  
  239.         $flags - 可選的標志。目前未使用  
  240. 31.通過條目索引,檢索條目額外的屬性  
  241.     getExternalAttributesIndex(int $index, int &$opsys, int &attr [, int $flags])  
  242.         $index - 條目索引  
  243.         &$opsys - 成功,返回ZipArchive::OPSYS_xx 定義的操作系統碼 - 注意是 '&-引用變量,會接收值'  
  244.         &$attr - 成功,返回額外的屬性。屬性值取決於操作系統 - 注意是 '&-引用變量,會接收值'  
  245.         $flags - 標志  
  246.             設置為 'ZipArchive::FL_UNCHANGED',返回原始的未改變過的注釋  
  247. 32.在zip包中,通過條目名稱,給條目設置額外的屬性  
  248.     setExternalAttributesName(string $name, int $opsys, int $attr [, int $flags])  
  249.         $name - 條目名稱  
  250.         $opsys - ZipArchive::OPSYS_xx 定義的操作系統碼  
  251.         $attr - 額外的屬性。屬性值取決於操作系統  
  252.         $flags - 可選的標志。目前未使用  
  253. 33.通過條目名稱,檢索條目額外的屬性  
  254.     getExternalAttributesName(string $name, int &$opsys, int &attr [, int $flags])  
  255.         $name - 條目名稱  
  256.         &$opsys - 成功,返回ZipArchive::OPSYS_xx 定義的操作系統碼 - 注意是 '&-引用變量,會接收值'  
  257.         &$attr - 成功,返回額外的屬性。屬性值取決於操作系統 - 注意是 '&-引用變量,會接收值'  
  258.         $flags - 標志  
  259.             設置為 'ZipArchive::FL_UNCHANGED',返回原始的未改變過的注釋  
  260.   
  261. 34.撤銷zip包的所有改變  
  262.     unchangeAll()  
  263.   
  264. 35.撤銷zip包的所有全局改變,當前,只針對 'comment - 注釋'  
  265.     unchangeArchive()  
  266.   
  267. 36.通過條目索引,撤銷指定條目的所有改變  
  268.     unchangeIndex(int $index)  
  269.         $index - 條目索引  
  270.   
  271. 37.通過條目名稱,撤銷指定條目的所有改變  
  272.     unchangeName(string $name)  
  273.         $name - 條目名稱  
  274.   
  275. 38.ZipArchive 使用的類常量。 有以下三類常量:Flags(以 FL_ 為前綴),errors(以 ER_ 為前綴)以及 mode(沒有前綴)。  
  276.     ZIPARCHIVE::CREATE (integer) - 如果不存在則創建一個zip壓縮包。  
  277.     ZIPARCHIVE::OVERWRITE (integer) - 總是以一個新的壓縮包開始,此模式下如果已經存在則會被覆蓋。  
  278.     ZIPARCHIVE::EXCL (integer) - 如果壓縮包已經存在,則出錯。  
  279.     ZIPARCHIVE::CHECKCONS (integer) - 對壓縮包執行額外的一致性檢查,如果失敗則顯示錯誤。  
  280.     ZIPARCHIVE::FL_NOCASE (integer) - 查找時忽略名稱的大小寫。  
  281.     ZIPARCHIVE::FL_NODIR (integer) - 忽略目錄部分  
  282.     ZIPARCHIVE::FL_COMPRESSED (integer) - 讀取壓縮數據  
  283.     ZIPARCHIVE::FL_UNCHANGED (integer) - 使用原始數據,忽略更改。  
  284.     ZIPARCHIVE::CM_DEFAULT (integer) - 更好的壓縮或存儲。  
  285.     ZIPARCHIVE::CM_STORE (integer) - 存儲(不壓縮)。  
  286.     ZIPARCHIVE::CM_SHRINK (integer) - 收縮  
  287.     ZIPARCHIVE::CM_REDUCE_1 (integer) - 用因子1換算  
  288.     ZIPARCHIVE::CM_REDUCE_2 (integer) - 用因子2換算  
  289.     ZIPARCHIVE::CM_REDUCE_3 (integer) - 用因子3換算  
  290.     ZIPARCHIVE::CM_REDUCE_4 (integer) - 用因子4換算  
  291.     ZIPARCHIVE::CM_IMPLODE (integer) - 聚爆  
  292.     ZIPARCHIVE::CM_DEFLATE (integer) - deflated  
  293.     ZIPARCHIVE::CM_DEFLATE64 (integer) - deflate64  
  294.     ZIPARCHIVE::CM_PKWARE_IMPLODE (integer) - PKWARE imploding  
  295.     ZIPARCHIVE::CM_BZIP2 (integer) - BZIP2算法  
  296.     ZIPARCHIVE::ER_OK (integer) - 沒有錯誤。  
  297.     ZIPARCHIVE::ER_MULTIDISK (integer) - 不支持多磁盤zip壓縮包。  
  298.     ZIPARCHIVE::ER_RENAME (integer) - 重命名臨時文件失敗。  
  299.     ZIPARCHIVE::ER_CLOSE (integer) - 關閉zip壓縮包失敗。  
  300.     ZIPARCHIVE::ER_SEEK (integer) - 尋址錯誤  
  301.     ZIPARCHIVE::ER_READ (integer) - 讀取錯誤  
  302.     ZIPARCHIVE::ER_WRITE (integer) - 寫入錯誤  
  303.     ZIPARCHIVE::ER_CRC (integer) - CRC校驗失敗  
  304.     ZIPARCHIVE::ER_ZIPCLOSED (integer) - zip壓縮包已關閉  
  305.     ZIPARCHIVE::ER_NOENT (integer) - 沒有文件  
  306.     ZIPARCHIVE::ER_EXISTS (integer) - 文件已經存在  
  307.     ZIPARCHIVE::ER_OPEN (integer) - 不能打開文件  
  308.     ZIPARCHIVE::ER_TMPOPEN (integer) - 創建臨時文件失敗  
  309.     ZIPARCHIVE::ER_ZLIB (integer) - Zlib錯誤  
  310.     ZIPARCHIVE::ER_MEMORY (integer) - 內存分配失敗  
  311.     ZIPARCHIVE::ER_CHANGED (string) - 條目已被改變  
  312.     ZIPARCHIVE::ER_COMPNOTSUPP (integer) - 不支持的壓縮方式  
  313.     ZIPARCHIVE::ER_EOF (integer) - 過早的EOF  
  314.     ZIPARCHIVE::ER_INVAL (integer) - 無效的參數  
  315.     ZIPARCHIVE::ER_NOZIP (integer) - 不是一個zip壓縮包  
  316.     ZIPARCHIVE::ER_INTERNAL (integer) - Internal error  
  317.     ZIPARCHIVE::ER_INCONS (integer) - Zip壓縮包不一致  
  318.     ZIPARCHIVE::ER_REMOVE (integer) - 不能移除文件  
  319.     ZIPARCHIVE::ER_DELETED (integer) - 條目已被刪除 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM