婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > PHP實現rar解壓讀取擴展包小結

PHP實現rar解壓讀取擴展包小結

熱門標簽:凱立德地鐵站地圖標注 上海400客服電話怎么申請 銀行信貸電話機器人 手機外呼系統什么原理 合肥ai電銷機器人費用 溫州外呼系統招商 天津電銷外呼系統違法嗎 滄州電銷外呼系統價格 400電話個人能不能辦理

作為壓縮解壓方面的擴展學習,兩大王牌壓縮格式 rar 和 zip 一直是計算機領域的壓縮終結者。rar 格式的壓縮包是 Windows 系統中有接近統治地位的存在,今天我們學習的 PHP 擴展就是針對于 rar 的壓縮包操作,不過,PHP 的 rar 擴展僅能讀取和解壓 rar 格式的壓縮包,并不能進行壓縮操作。

php-rar 擴展在 pecl 的安裝包已經過時了,無法在 PHP7 中使用,我們需要使用它在 github 上的源碼進行編譯安裝才能夠在 PHP7 的環境下安裝成功。

https://github.com/cataphract/php-rar

直接 git clone 之后就可以按正常的 PHP 擴展的方式進行安裝。

獲取壓縮包句柄 RarArchive

$arch = RarArchive::open("test.rar");

$archNo = rar_open("test.rar");

echo $arch, PHP_EOL; // RAR Archive "/data/www/blog/test.rar"
echo $archNo, PHP_EOL; // RAR Archive "/data/www/blog/test.rar"

$arch->close();
rar_close($archNo);

echo $arch, PHP_EOL; // RAR Archive "/data/www/blog/test.rar" (closed)
echo $archNo, PHP_EOL; // RAR Archive "/data/www/blog/test.rar" (closed)

php-rar 擴展有兩種形式的寫法,一種是面向對象的,也就是使用 RarArchive 類來操作壓縮包。另一種方式就是直接使用一個函數 rar_open 用來獲取一個 rar 文件的句柄。它們都重寫了 __toString 方法,所以我們可以直接打印句柄的內容看到當前句柄所操作的具體文件。

當我們關閉句柄時,句柄對象依然能夠進行輸出,但后面會顯示一個 closed 。這時的句柄對象已經不能進行其它操作了。

$arch = RarArchive::open("test.rar");
$archNo = rar_open("test.rar");

echo $arch->getComment(), PHP_EOL;
echo $arch->isBroken(), PHP_EOL;
echo $arch->isSolid(), PHP_EOL;

echo rar_comment_get($archNo), PHP_EOL;
echo rar_broken_is($archNo), PHP_EOL;
echo rar_solid_is($archNo), PHP_EOL;

echo $arch->setAllowBroken(true), PHP_EOL;
echo rar_allow_broken_set($archNo, true), PHP_EOL;

RarArchive 對象的一些方法可以幫我們獲取當前壓縮包的信息。比如 getComment() 獲取壓縮包的說明信息,isBroken() 獲取當前壓縮包是否有損壞,isSolid() 檢查當前壓縮包是否可用。而 setAllowBroken() 方法是讓我們允許對損壞的壓縮包進行操作。這里我們給出了面向對象和面向過程的寫法。

壓縮包內的每個實體文件或目錄操作 RarEntry

獲得壓縮包的句柄之后,我們就需要更進一步地獲取壓縮包內部的內容。而句柄對象中就已經保存了壓縮包內部的各個文件和目錄的對象 RarEntry 。

$gameEntry = $arch->getEntry('ldxlcs/ldxlcs/game.htm');
echo $gameEntry->getName(), PHP_EOL; // ldxlcs/ldxlcs/game.htm
echo $gameEntry->getUnpackedSize(), PHP_EOL; // 56063

$gameEntryNo = rar_entry_get($arch, "ldxlcs/ldxlcs/game.htm");
echo $gameEntry->getName(), PHP_EOL; // ldxlcs/ldxlcs/game.htm
echo $gameEntry->getUnpackedSize(), PHP_EOL; // 56063

$fp = $gameEntryNo->getStream();
while (!feof($fp)) {
    $buff = fread($fp, 8192);
    if ($buff !== false) {
        echo $buff;
    } else {
        break;
    }
    //fread error
}
// 輸出文件的全部內容
echo PHP_EOL;

echo 'Entry extract: ', $gameEntry->extract("./"), PHP_EOL;

句柄對象的 getEntry() 方法就是用于獲取指定的文件或者目錄內容的。它獲取的是單個文件或目錄,所以必須明確地指定需要獲取的文件內容。通過這個方法,我們可以拿到一個 RarEntry 對象。接下來,就是這個對象的一些操作。

RarEntry 對象的 getName() 方法用于獲取文件名稱,這個文件名稱是帶路徑的,這個路徑是壓縮包內的絕對路徑。getUnpackedSize() 方法用于獲取文件的大小,getStream() 用于獲取文件流,通過 getStream() 方法,我們就可以直接打印輸出文件的內容。

當然,最最重要的是,我們可以通過 extract() 方法來直接解壓一個文件到指定的目錄。php-rar 擴展并沒有提供一個能夠完全地解壓整個壓縮包的方法,所以如果我們需要對整個壓縮包進行解壓的話,就需要通過循環遍歷壓縮包內部的全部內容來對這些文件一個一個地進行解壓。

最后,我們就來看看如何遍歷壓縮包內的全部內容。

$entries = $arch->getEntries();

foreach ($entries as $en) {
    echo $en, PHP_EOL;
    echo $en->getName(), PHP_EOL;
    echo $en->getUnpackedSize(), PHP_EOL;
    echo $en->getAttr(), PHP_EOL;
    echo $en->getCrc(), PHP_EOL;
    echo $en->getFileTime(), PHP_EOL;
    echo $en->getHostOs(), PHP_EOL;
    echo $en->getMethod(), PHP_EOL;
    echo $en->getPackedSize(), PHP_EOL;
    echo $en->getVersion(), PHP_EOL;
    echo $en->isDirectory(), PHP_EOL;
    echo $en->isEncrypted(), PHP_EOL;

}

// 壓縮包中所有文件的內容
// RarEntry for file "ldxlcs/ldxlcs/game.htm" (3c19abf6)
// ldxlcs/ldxlcs/game.htm
// 56063
// 32
// 3c19abf6
// 2017-09-10 13:25:04
// 2
// 51
// 7049
// 200
// ……

$entriesNo = rar_list($archNo);
foreach ($entriesNo as $en) {
    echo $en->getName(), PHP_EOL;
}

直接使用的是 RarArchive 對象的 getEntries() 方法,我們通過這個方法可以獲得一個 RarEntry 對象的數組,里面包含的就是這個 rar 壓縮包里面的全部內容。在這段代碼中,我們還打印了 RarEntry 對象的其它一些屬性方法,根據名稱也能大概了解這些方法都是獲取關于文件的各種信息的,大家可以自行測試。

異常處理

最后,如果打開錯了文件或者獲取壓縮包內部沒有的文件時,php-rar 擴展會以 PHP 錯誤的形式報錯。但既然提供了完整的面向對象寫法,那么它也必然提供了一套面向對象的異常處理機制。

// 不打開 UsingExceptions 全部錯誤會走 PHP 錯誤機制,打開后走 PHP 的異常機制
RarException::setUsingExceptions(true);
var_dump(RarException::isUsingExceptions()); // bool(true)
try {
    $arch = RarArchive::open("test1.rar");
    $arch->getEntry('ttt.txt');
} catch (RarException $e) {
    var_dump($e);
    // object(RarException)#35 (7) {
    //     ["message":protected]=>
    //     string(91) "unRAR internal error: Failed to open /data/www/blog/test1.rar: ERAR_EOPEN (file open error)"
    //     ["string":"Exception":private]=>
    //     string(0) ""
    //     ["code":protected]=>
    //     int(15)
    //     ["file":protected]=>
    //     string(22) "/data/www/blog/rar.php"
    //     ["line":protected]=>
    //     int(93)
    //     ["trace":"Exception":private]=>
    //     array(1) {
    //       [0]=>
    //       array(6) {
    //         ["file"]=>
    //         string(22) "/data/www/blog/rar.php"
    //         ["line"]=>
    //         int(93)
    //         ["function"]=>
    //         string(4) "open"
    //         ["class"]=>
    //         string(10) "RarArchive"
    //         ["type"]=>
    //         string(2) "::"
    //         ["args"]=>
    //         array(1) {
    //           [0]=>
    //           string(9) "test1.rar"
    //         }
    //       }
    //     }
    //     ["previous":"Exception":private]=>
    //     NULL
    //   }
}

只要將 RarException::setUsingExceptions() 設置為 true ,就能夠開啟 php-rar 擴展的異常處理機制,這時,我們打開一個錯誤的文件,或者去獲取壓縮包內的一個錯誤文件路徑,那么,錯誤信息就會以異常的形式進行拋出。

總結

這套擴展是不是感覺很人性化?即提供了面向對象的方式,也提供了以函數操作為主的面向過程的方式。但是,這樣做其實并沒有太多的好處,因為又要兼顧老代碼,又要兼顧新思想,本身擴展的內部實現相必也會復雜很多。我們自己寫代碼的時候就盡量不要這么寫了,在重構的時候一步步的向最新的形式遷移即可。

關于 rar 的壓縮操作并沒有找到太多有用的資料。當然,我們在生產環境中如果要生成壓縮包的話大部分情況下都會直接去生成 zip 格式的提供給用戶,畢竟大部分的客戶端軟件都是能夠同時支持 rar 和 zip 格式文件的解壓的,如果一定要指定生成 rar 的話,也可以多多和產品經理或者客戶商量。有的時候,技術的難點是可以通過業務的變通來解決的,最重要的其實還是在于溝通。

測試代碼:

https://github.com/zhangyue0503/dev-blog/blob/master/php/202007/source/PHP%E7%9A%84rar%E8%A7%A3%E5%8E%8B%E8%AF%BB%E5%8F%96%E6%89%A9%E5%B1%95%E5%8C%85%E5%AD%A6%E4%B9%A0.php

參考文檔:
https://www.php.net/manual/zh/book.rar.php

以上就是PHP的rar解壓讀取擴展包學習的詳細內容,更多關于PHP rar解壓讀取的資料請關注腳本之家其它相關文章!

您可能感興趣的文章:
  • php解壓縮zip和rar壓縮包文件的方法
  • php安裝php_rar擴展實現rar文件讀取和解壓的方法
  • php 解壓rar文件及zip文件的方法
  • PHP執行zip與rar解壓縮方法實現代碼
  • ThinkPHP5.0框架驗證碼功能實現方法【基于第三方擴展包】

標簽:洛陽 酒泉 七臺河 溫州 金華 怒江 赤峰 白城

巨人網絡通訊聲明:本文標題《PHP實現rar解壓讀取擴展包小結》,本文關鍵詞  PHP,實現,rar,解壓,讀取,擴展,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《PHP實現rar解壓讀取擴展包小結》相關的同類信息!
  • 本頁收集關于PHP實現rar解壓讀取擴展包小結的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    欧美日韩精品一区二区三区四区| 免费欧美高清视频| 久久综合网色—综合色88| 国产精品无码永久免费888| 国产精品电影院| 日韩精品成人一区二区三区| 国产一区二区三区| 国产精品免费视频观看| 日韩黄色在线观看| 欧美亚洲动漫制服丝袜| 久久久高清一区二区三区| 亚洲国产精品久久久久秋霞影院| 成人av在线资源| 制服丝袜日韩国产| 一区二区三区在线视频免费观看 | 青青草国产精品97视觉盛宴| 99精品视频一区二区三区| 久久久午夜精品理论片中文字幕| 亚洲成a人v欧美综合天堂| 91香蕉视频黄| 亚洲少妇30p| 91年精品国产| 自拍偷拍亚洲综合| 不卡的av在线播放| 国产精品久99| 韩日av一区二区| 亚洲美女偷拍久久| 一本色道**综合亚洲精品蜜桃冫| 男人的j进女人的j一区| 亚洲人成在线播放网站岛国| 日韩视频免费直播| 91麻豆福利精品推荐| 久久91精品国产91久久小草| 亚洲免费在线看| 久久众筹精品私拍模特| 欧美日韩在线观看一区二区| 成人av在线播放网站| 国产综合色在线| 蜜臀久久久99精品久久久久久| 亚洲狠狠丁香婷婷综合久久久| 久久一日本道色综合| 91精品久久久久久久99蜜桃| 91视频在线观看免费| 成人污视频在线观看| 久久精品国产成人一区二区三区| 亚洲综合久久久久| 亚洲精品日日夜夜| 综合欧美亚洲日本| 中文字幕日韩一区| 国产精品久久夜| 中文字幕精品综合| 国产日韩欧美一区二区三区乱码 | 日韩欧美在线一区二区三区| 91免费看`日韩一区二区| 国产传媒日韩欧美成人| 精品一区在线看| 青椒成人免费视频| 爽好多水快深点欧美视频| 亚洲成人高清在线| 午夜精品福利一区二区三区av| 又紧又大又爽精品一区二区| 有码一区二区三区| 一个色在线综合| 亚洲一区电影777| 亚洲精品久久久久久国产精华液| 日韩一区有码在线| 一区二区三区四区在线播放| 亚洲自拍另类综合| 日韩中文字幕不卡| 日韩 欧美一区二区三区| 日本午夜精品视频在线观看| 亚洲高清免费在线| 蜜桃av噜噜一区| 国产成人在线电影| 91美女片黄在线观看| 色婷婷国产精品| 欧美一级久久久| 久久免费的精品国产v∧| 国产精品久久久一本精品| 亚洲精品免费看| 日韩在线观看一区二区| 另类小说欧美激情| 成人午夜电影久久影院| 在线看日韩精品电影| 在线不卡一区二区| 久久久蜜桃精品| 一区二区久久久久| 久久精品国产亚洲aⅴ| 成人黄色av电影| 欧美午夜电影一区| 欧美成人三级电影在线| 国产精品久久久久久久久久免费看| 亚洲视频一二区| 麻豆91在线播放免费| 99re这里只有精品视频首页| 日韩一级在线观看| 亚洲视频在线观看一区| 久久精品国产澳门| 91极品美女在线| 国产视频在线观看一区二区三区| 亚洲美女偷拍久久| 国模娜娜一区二区三区| 欧美天堂亚洲电影院在线播放| 国产视频一区二区在线观看| 日韩制服丝袜先锋影音| 99精品久久只有精品| 精品免费国产一区二区三区四区| 亚洲免费资源在线播放| 国产盗摄精品一区二区三区在线| 欧美日韩在线播| 中文字幕一区二区不卡| 国产最新精品精品你懂的| 在线播放中文字幕一区| 亚洲色图视频网| 国产91在线观看丝袜| 日韩欧美中文字幕公布| 亚洲国产美国国产综合一区二区| 成人中文字幕在线| 久久中文字幕电影| 久久成人免费网| 欧美一级日韩一级| 伊人性伊人情综合网| www.欧美色图| 国产日韩精品一区二区浪潮av | 欧美激情综合网| 另类专区欧美蜜桃臀第一页| 欧美丝袜自拍制服另类| 亚洲欧美日韩中文字幕一区二区三区| 国产一区中文字幕| 久久综合999| 麻豆精品国产91久久久久久| 欧美三级视频在线观看| 亚洲一区二区视频| 欧美体内she精高潮| 视频在线观看91| 欧美一区二区精品久久911| 婷婷一区二区三区| 欧美日韩精品免费观看视频| 亚洲丶国产丶欧美一区二区三区| 一本大道久久a久久精二百| 中文字幕一区二区视频| va亚洲va日韩不卡在线观看| 成人欧美一区二区三区白人| 日本福利一区二区| 午夜电影一区二区| 日韩欧美国产综合| 国产盗摄精品一区二区三区在线| 中文字幕精品三区| 日本丶国产丶欧美色综合| 一区二区三国产精华液| 欧美人伦禁忌dvd放荡欲情| 美国av一区二区| 国产婷婷色一区二区三区四区| 成人福利视频在线| 亚洲亚洲人成综合网络| 日韩欧美一区二区三区在线| 懂色av一区二区在线播放| 亚洲精品日韩一| 日韩亚洲欧美在线观看| 福利电影一区二区三区| 一区二区三区中文字幕| 欧美大度的电影原声| 成人精品视频一区二区三区| 一区二区三区日本| 日韩欧美一级特黄在线播放| 成人深夜视频在线观看| 亚洲一区二区三区激情| 久久婷婷色综合| 欧美性猛交xxxx黑人交| 国产精选一区二区三区| 亚洲免费高清视频在线| 日韩精品一区国产麻豆| 91亚洲国产成人精品一区二三| 免费观看在线综合色| **网站欧美大片在线观看| 91.xcao| 国产不卡视频一区| 奇米精品一区二区三区在线观看一| 国产日韩欧美一区二区三区乱码| 欧美日韩你懂的| 成人国产一区二区三区精品| 日韩激情在线观看| 亚洲精品免费电影| 国产精品素人视频| 久久综合国产精品| 欧美日本一区二区在线观看| 99久久免费视频.com| 国产毛片精品视频| 麻豆国产精品视频| 五月天欧美精品| 一区二区三区欧美激情| 国产精品久久久久aaaa| 久久免费精品国产久精品久久久久| 欧美日韩成人综合| 欧美中文字幕一区二区三区亚洲| 成人免费av在线| 国产精品18久久久久久vr| 美女在线观看视频一区二区| 一二三四社区欧美黄| 亚洲欧美一区二区不卡|