PHP執(zhí)行zip與rar解壓縮方法實(shí)現(xiàn)代碼
更新時(shí)間:2010年12月05日 13:46:41 作者:
PHP執(zhí)行zip與rar解壓縮方法 先放著,以后研究,有地方要用到。
Zip:PclZip http://www.phpconcept.net/pclzip/index.en.php
Rar:PECL rar http://pecl.php.net/package/rar
以往過(guò)去要在php下執(zhí)行解壓縮程序,無(wú)非最常見(jiàn)的方法是寫(xiě)command 然后用exec()等執(zhí)行函式去跑
這在Windows下或許可以,但換成Unix話會(huì)礙于帳號(hào)權(quán)限問(wèn)題而無(wú)法順利執(zhí)行
那有沒(méi)有那種本身就有提供函式可以直接使用而不需要去下command去跑的方法呢
答桉有(話說(shuō)找了好幾天才找到可以用的方法......XD)
先講Zip,由于php內(nèi)建本身就有提供zip相關(guān)函式(但須先要有ziplib函式)但不是很好用
就光extract來(lái)講,內(nèi)建函式只負(fù)責(zé)單純解壓縮檔桉出來(lái),而不是會(huì)按照資料夾依序解壓縮出來(lái)
這樣就失去extract的作用
而要講的 PclZip 這支,本身就有提供 extension 了,故有沒(méi)有Ziplib就沒(méi)差
且免安裝,只需要再用他時(shí) include 進(jìn)來(lái)就可以了
例如:<?php include('pclzip.lib.php'); ?> 這樣
此外在extract部分,則是會(huì)按照資料夾順序依序解壓縮出來(lái),而并非單純解壓縮檔桉出來(lái)
相關(guān)用法像這樣
<?php
require_once('pclzip.lib.php');
$archive = new PclZip('archive.zip');
if ($archive->extract() == 0) { /*解壓縮路徑跟原始檔相同路徑*/
die("Error : ".$archive->errorInfo(true));
}
?>
當(dāng)然也可以指定解壓縮路徑,像這樣
<?php
include('pclzip.lib.php');
$archive = new PclZip('archive.zip');
if ($archive->extract(PCLZIP_OPT_PATH, 'data') { /*data換成其他路徑即可*/
die("Error : ".$archive->errorInfo(true));
}
?>
如果再寫(xiě)一支自動(dòng)建立目錄的script會(huì)更好,因?yàn)楹奖旧聿粫?huì)判斷壓縮檔裡第一層是檔桉還是資料夾(這我想其他相關(guān)函式也做不到吧!?。。?
再來(lái)是Rar,這問(wèn)題比較大,由于php本身沒(méi)提供rar相關(guān)函式,所以需要求助第三方函式來(lái)用
所幸有這個(gè) PECL(The PHP Extension Community Library)
裡面有個(gè) rar 的 package 可以使用
不過(guò)須得手動(dòng)安裝才行
若是 Unix 話,可以參考下列安裝法
fetch http://pecl.php.net/get/rar-x.x.x.tgz
gunzip rar-xxx.tgz
tar -xvf rar-xxx.tar
cd rar-xxx
phpize
./configure && make && make install
當(dāng)然若是 freebsd 話,用 port 裝會(huì)更快
cd /usr/ports/archivers/pecl-rar
make
make install
記得安裝完后須 restart apache
安裝完后可以做測(cè)試
<?php
$rar_file = rar_open('example.rar') or die("Failed to open Rar archive");
/*example.rar換成其他檔桉即可*/
$entries_list = rar_list($rar_file);
print_r($entries_list);
?>
比較要注意的,若是用 port 安裝話,版本會(huì)比較新(官網(wǎng)只有到0.3.1,port 安裝話已經(jīng)到0.3.4),所以用法上會(huì)有些出入
但extract用法上并無(wú)差異
相關(guān)用法像這樣
<?php
$rar_file = rar_open('example.rar') or die("Can't open Rar archive");
/*example.rar換成其他檔桉即可*/
$entries = rar_list($rar_file);
foreach ($entries as $entry) {
$entry->extract('/dir/extract/to/'); /*/dir/extract/to/換成其他路徑即可*/
}
rar_close($rar_file);
?>
跟Zip部分一樣,若搭配自動(dòng)建立目錄會(huì)更好
Rar:PECL rar http://pecl.php.net/package/rar
以往過(guò)去要在php下執(zhí)行解壓縮程序,無(wú)非最常見(jiàn)的方法是寫(xiě)command 然后用exec()等執(zhí)行函式去跑
這在Windows下或許可以,但換成Unix話會(huì)礙于帳號(hào)權(quán)限問(wèn)題而無(wú)法順利執(zhí)行
那有沒(méi)有那種本身就有提供函式可以直接使用而不需要去下command去跑的方法呢
答桉有(話說(shuō)找了好幾天才找到可以用的方法......XD)
先講Zip,由于php內(nèi)建本身就有提供zip相關(guān)函式(但須先要有ziplib函式)但不是很好用
就光extract來(lái)講,內(nèi)建函式只負(fù)責(zé)單純解壓縮檔桉出來(lái),而不是會(huì)按照資料夾依序解壓縮出來(lái)
這樣就失去extract的作用
而要講的 PclZip 這支,本身就有提供 extension 了,故有沒(méi)有Ziplib就沒(méi)差
且免安裝,只需要再用他時(shí) include 進(jìn)來(lái)就可以了
例如:<?php include('pclzip.lib.php'); ?> 這樣
此外在extract部分,則是會(huì)按照資料夾順序依序解壓縮出來(lái),而并非單純解壓縮檔桉出來(lái)
相關(guān)用法像這樣
復(fù)制代碼 代碼如下:
<?php
require_once('pclzip.lib.php');
$archive = new PclZip('archive.zip');
if ($archive->extract() == 0) { /*解壓縮路徑跟原始檔相同路徑*/
die("Error : ".$archive->errorInfo(true));
}
?>
當(dāng)然也可以指定解壓縮路徑,像這樣
復(fù)制代碼 代碼如下:
<?php
include('pclzip.lib.php');
$archive = new PclZip('archive.zip');
if ($archive->extract(PCLZIP_OPT_PATH, 'data') { /*data換成其他路徑即可*/
die("Error : ".$archive->errorInfo(true));
}
?>
如果再寫(xiě)一支自動(dòng)建立目錄的script會(huì)更好,因?yàn)楹奖旧聿粫?huì)判斷壓縮檔裡第一層是檔桉還是資料夾(這我想其他相關(guān)函式也做不到吧!?。。?
再來(lái)是Rar,這問(wèn)題比較大,由于php本身沒(méi)提供rar相關(guān)函式,所以需要求助第三方函式來(lái)用
所幸有這個(gè) PECL(The PHP Extension Community Library)
裡面有個(gè) rar 的 package 可以使用
不過(guò)須得手動(dòng)安裝才行
若是 Unix 話,可以參考下列安裝法
fetch http://pecl.php.net/get/rar-x.x.x.tgz
gunzip rar-xxx.tgz
tar -xvf rar-xxx.tar
cd rar-xxx
phpize
./configure && make && make install
當(dāng)然若是 freebsd 話,用 port 裝會(huì)更快
cd /usr/ports/archivers/pecl-rar
make
make install
記得安裝完后須 restart apache
安裝完后可以做測(cè)試
復(fù)制代碼 代碼如下:
<?php
$rar_file = rar_open('example.rar') or die("Failed to open Rar archive");
/*example.rar換成其他檔桉即可*/
$entries_list = rar_list($rar_file);
print_r($entries_list);
?>
比較要注意的,若是用 port 安裝話,版本會(huì)比較新(官網(wǎng)只有到0.3.1,port 安裝話已經(jīng)到0.3.4),所以用法上會(huì)有些出入
但extract用法上并無(wú)差異
相關(guān)用法像這樣
復(fù)制代碼 代碼如下:
<?php
$rar_file = rar_open('example.rar') or die("Can't open Rar archive");
/*example.rar換成其他檔桉即可*/
$entries = rar_list($rar_file);
foreach ($entries as $entry) {
$entry->extract('/dir/extract/to/'); /*/dir/extract/to/換成其他路徑即可*/
}
rar_close($rar_file);
?>
跟Zip部分一樣,若搭配自動(dòng)建立目錄會(huì)更好
相關(guān)文章
PHP取整函數(shù):ceil,floor,round,intval的區(qū)別詳細(xì)解析
以下是對(duì)PHP中的取整函數(shù):ceil,floor,round,intval的區(qū)別進(jìn)行了詳細(xì)的介紹,需要的朋友可以過(guò)來(lái)參考下2013-08-08關(guān)于PHP自動(dòng)判斷字符集并轉(zhuǎn)碼的詳解
本篇文章是對(duì)PHP自動(dòng)判斷字符集并轉(zhuǎn)碼進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06PHP把MSSQL數(shù)據(jù)導(dǎo)入到MYSQL的方法
這篇文章主要介紹了PHP把MSSQL數(shù)據(jù)導(dǎo)入到MYSQL的方法,分別列舉了兩個(gè)實(shí)例實(shí)現(xiàn)將MSSQL數(shù)據(jù)導(dǎo)入到MYSQL的功能,是非常實(shí)用的技巧,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2014-12-12PHP使用file_get_content設(shè)置頭信息的方法
這篇文章主要介紹了PHP使用file_get_content設(shè)置頭信息的方法,結(jié)合實(shí)例形式對(duì)比分析了PHP使用fopen及file_get_contents設(shè)置及獲取頭信息的相關(guān)技巧,需要的朋友可以參考下2016-02-02PHP高效處理前端數(shù)據(jù)過(guò)濾二維數(shù)組并存入數(shù)據(jù)庫(kù)
這篇文章主要介紹了PHP高效處理前端數(shù)據(jù)過(guò)濾二維數(shù)組并存入數(shù)據(jù)庫(kù),通過(guò)從二維數(shù)組獲取指定數(shù)據(jù),組成新二維數(shù)組實(shí)現(xiàn)過(guò)程示例來(lái)為大家講解2023-10-10php使用CURL偽造IP和來(lái)源實(shí)例詳解
這篇文章主要介紹了php使用CURL偽造IP和來(lái)源的方法,以實(shí)例形式詳細(xì)分析了CURL偽造IP和來(lái)源的原理與實(shí)現(xiàn)技巧,并補(bǔ)充說(shuō)明了PHP中的CURL函數(shù)庫(kù)常用函數(shù),需要的朋友可以參考下2015-01-01