這篇文章主要介紹了PHP中zip壓縮工具擴(kuò)展包怎么用,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

創(chuàng)新互聯(lián)建站堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都做網(wǎng)站、網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的塔城網(wǎng)站設(shè)計(jì)、移動媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
總算到了 PHP 的拿手好戲上場了,前面我們學(xué)習(xí)過 Bzip2 、 LZF 、 Phar 和 rar 這些壓縮相關(guān)擴(kuò)展在 PHP 中的使用,不過它們要么是太冷門,要么就是很多功能不支持。而 Zip 則是在 PHP 中得到最大幅度功能支持的熱門壓縮格式,或者說是通用常見的一種壓縮格式。當(dāng)然,也主要得益于 Zip 也是事實(shí)上的 Linux 環(huán)境中的通用壓縮格式。
對于 PHP 來說,Zip 擴(kuò)展已經(jīng)集成在了 PHP 的安裝包中,在 Configure 的時候可以直接加上 --with-zip ,如果在安裝的時候沒有加上這個參數(shù),我們也可以在源碼包的 ext/zip 下找到源碼,然后通過擴(kuò)展安裝的方式進(jìn)行安裝。
$zip = new ZipArchive();
$filename = './test_zip.zip';
if($zip->open($filename, ZIPARCHIVE::CREATE)!==TRUE){
exit('cannot open ' . $filename .'\n');
}
// 加入文字類型的文件
$zip->addFromString('testfile1.txt' . time(), "#1");
$zip->addFromString('testfile2.txt' . time(), "#2");
// 加入已存在的文件
$zip->addFile('rar.php', 'newrar.php');
echo $zip->numFiles, PHP_EOL; // 文件數(shù)量
echo $zip->status, PHP_EOL; // 壓縮包狀態(tài)
$zip->close();
// 使用操作系統(tǒng)的 unzip 查看
// # unzip -l test_zip.zip
// Archive: test_zip.zip
// Length Date Time Name
// --------- ---------- ----- ----
// 2 07-08-2020 08:57 testfile1.txt1594169845
// 2 07-08-2020 08:57 testfile2.txt1594169845
// 2178 07-07-2020 08:55 newrar2.php
// --------- -------
// 2182 3 files之前學(xué)習(xí)過的 rar 擴(kuò)展是無法打包文件或者創(chuàng)建新的壓縮包的,而 Zip 一上來我們就學(xué)習(xí)的是創(chuàng)建一個新的壓縮包。通過實(shí)例化一個 ZipArchive 對象后,我們就可以使用 open() 函數(shù)打開或創(chuàng)建一個壓縮包文件。接著,我們使用了兩種添加內(nèi)容的方式。addFromString() 是加入文字類型的文件,也就是將一段文字轉(zhuǎn)換成文本文件保存在這個壓縮包中。另外,我們通過 addFile() 來將外部的文件加入到這個壓縮包中。
numFiles 和 status 屬性可以分別查看到壓縮包文件里面的文件數(shù)量及當(dāng)前這個壓縮包的狀態(tài)信息。最后直接使用 close() 關(guān)閉句柄即可。這樣,一個簡單的 Zip 壓縮包文件就創(chuàng)建完成了。我們可以直接使用操作系統(tǒng)的 unzip 命令來查看壓縮包的內(nèi)容。
$zip = new ZipArchive();
$zip->open('./test_zip.zip');
print_r($zip); // 壓縮包信息
// ZipArchive Object
// (
// [status] => 0
// [statusSys] => 0
// [numFiles] => 40
// [filename] => /data/www/blog/test_zip.zip
// [comment] =>
// )
var_dump($zip);
// object(ZipArchive)#2 (5) {
// ["status"]=>
// int(0)
// ["statusSys"]=>
// int(0)
// ["numFiles"]=>
// int(40)
// ["filename"]=>
// string(27) "/data/www/blog/test_zip.zip"
// ["comment"]=>
// string(0) ""
// }
echo $zip->numFiles, PHP_EOL;
echo $zip->status, PHP_EOL;
echo $zip->statusSys, PHP_EOL;
echo $zip->filename, PHP_EOL;
echo $zip->comment, PHP_EOL;
echo $zip->count(), PHP_EOL;
for ($i=0; $i<$zip->numFiles;$i++) {
echo "index: $i\n";
// 打印每個文件實(shí)體信息
print_r($zip->statIndex($i));
// index: 0
// Array
// (
// [name] => testfile1.txt1594169845
// [index] => 0
// [crc] => 2930664868
// [size] => 2
// [mtime] => 1594169844
// [comp_size] => 2
// [comp_method] => 0
// [encryption_method] => 0
// )
// ……
$entry = $zip->statIndex($i);
if($entry['name'] == 'newrar.php'){
// 僅解壓 newrar.php 文件到指定目錄
$zip->extractTo('./test_zip_single', $entry['name']);
}
}
// 修改壓縮包內(nèi)的文件名
$zip->renameName('newrar.php', 'newrar2.php');
print_r($zip->getFromIndex(2)); // 獲取第二個文件的內(nèi)容
print_r($zip->getFromName('newrar2.php')); // 獲取指定文件名的文件內(nèi)容
$zip->extractTo('./test_zip'); // 解壓整個壓縮包到指定目錄
$zip->close();其實(shí)讀取也是同樣的步驟,實(shí)例化一個 ZipArchive 類,然后 open() 打開一個壓縮包文件句柄。接著就可以直接輸出一些壓縮包的屬性信息。我們可以通過循環(huán)并通過 statIndex() 方法獲取每個文件實(shí)體的信息。這里需要注意的是 statIndex() 獲取的是文件的信息,而不是這個文件的內(nèi)容。
當(dāng)然,我們也可以通過 getFromIndex() 或 getFromName() 直接獲取指定的文件。通過 renameName() 直接給壓縮包內(nèi)部的文件改名,通過 extractTo() 將指定的文件或者整個壓縮包解壓到指定的目錄中。extractTo() 方法的第二個參數(shù)如果指定了內(nèi)容,則只會解壓指定的這個文件。
既然是壓縮包工具,那么我們最常用的也就是直接將多個文件或者目錄進(jìn)行打包。同時,也有很多壓縮包可以設(shè)置一些說明、密碼什么的。另外,我們還可以通過專屬的 zip:// 偽協(xié)議來直接獲取壓縮包內(nèi)某個文件的內(nèi)容。這些功能,在 PHP 的 Zip 擴(kuò)展中都能夠非常簡單方便地使用。
// 壓縮目錄
$zip = new ZipArchive();
$zip->open('./test_zip2.zip', ZIPARCHIVE::CREATE);
$zip->addFile('rar.php', 'newrar.php');
$zip->addGlob('./test_zip/*.{php,txt}', GLOB_BRACE, ['add_path'=> 'new_path/']);直接使用 addGlob 就可以幫助我們完成對某個文件目錄下的所有文件的內(nèi)容打包。同時,它的第三個參數(shù)也可以指定這些文件在壓縮包內(nèi)部的路徑地址。
// 設(shè)置注釋、密碼
$zip->setArchiveComment('This is rar Comment!');
$zip->setPassword('123');
$zip->close();
// 使用操作系統(tǒng) unzip 查看
// # unzip -l test_zip2.zip
// Archive: test_zip2.zip
// This is rar Comment!
// Length Date Time Name
// --------- ---------- ----- ----
// 2178 07-07-2020 08:55 newrar.php
// 2178 07-08-2020 10:36 new_path/./test_zip/newrar.php
// 2178 07-08-2020 10:36 new_path/./test_zip/newrar2.php
// --------- -------
// 6534 3 files設(shè)置壓縮包的說明注釋以及密碼都是有現(xiàn)成的函數(shù)方法直接使用的。我們再次通過操作系統(tǒng)的 unzip 命令,就可以查看到這個壓縮包的注釋信息以及打包的目錄內(nèi)容。本來測試的 test_zip/ 目錄下的內(nèi)容被放在了 new_path/ 目錄下,這就是我們自定的一個壓縮包內(nèi)部的路徑地址。
// 流、偽協(xié)議方法讀取壓縮包內(nèi)容
$zip = new ZipArchive();
$zip->open('./test_zip2.zip');
// 獲取文件流
$fp = $zip->getStream('newrar.php');
while(!feof($fp)){
echo fread($fp, 2);
}
fclose($fp);
// 使用偽協(xié)議
$fp = fopen('zip://' . dirname(__FILE__) . '/test_zip2.zip#newrar.php', 'r');
while(!feof($fp)){
echo fread($fp, 2);
}
fclose($fp);
// file_get_contents 使用偽協(xié)議
echo file_get_contents('zip://' . dirname(__FILE__) . '/test_zip2.zip#newrar.php');
// 直接使用偽協(xié)議將文件拷貝出來
copy('zip://' . dirname(__FILE__) . '/test_zip2.zip#newrar.php', './newrar2.php');首先,我們通過 getStream() 方法直接獲取壓縮包中某個文件的流,這種方式幾乎是所有壓縮類擴(kuò)展都會提供的一種讀取文件的方式。而下面的方式則是通過 zip:// 偽協(xié)議直接使用 fopen() 、 file_get_contents() 函數(shù)來讀取壓縮包內(nèi)部的某個文件。既然有了這么方便的一個偽協(xié)議,那么我們要簡單的獲取并解壓某個文件也就變得十分容易了,直接使用 copy() 函數(shù)將這個文件拷貝出來就可以了。
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“PHP中zip壓縮工具擴(kuò)展包怎么用”這篇文章對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!
網(wǎng)站題目:PHP中zip壓縮工具擴(kuò)展包怎么用
網(wǎng)站網(wǎng)址:http://www.chinadenli.net/article12/pgssgc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供、App設(shè)計(jì)、網(wǎng)站策劃、網(wǎng)站制作、手機(jī)網(wǎng)站建設(shè)、品牌網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)