PHP執行zip與rar解壓縮方法實現代碼

來源:互聯網
上載者:User

Zip:PclZip http://www.phpconcept.net/pclzip/index.en.php
Rar:PECL rar http://pecl.php.net/package/rar
以往過去要在php下執行解壓縮程式,無非最常見的方法是寫command 然後用exec()等執行函式去跑
這在Windows下或許可以,但換成Unix話會礙於帳號許可權問題而無法順利執行
那有沒有那種本身就有提供函式可以直接使用而不需要去下command去跑的方法呢
答桉有(話說找了好幾天才找到可以用的方法......XD)
先講Zip,由於php內建本身就有提供zip相關函式(但須先要有ziplib函式)但不是很好用
就光extract來講,內建函式只負責單純解壓縮檔桉出來,而不是會按照資料夾依序解壓縮出來
這樣就失去extract的作用
而要講的 PclZip 這支,本身就有提供 extension 了,故有沒有Ziplib就沒差
且免安裝,只需要再用他時 include 進來就可以了
例如:<?php include('pclzip.lib.php'); ?> 這樣
此外在extract部分,則是會按照資料夾順序依序解壓縮出來,而並非單純解壓縮檔桉出來
相關用法像這樣 複製代碼 代碼如下:<?php
require_once('pclzip.lib.php');
$archive = new PclZip('archive.zip');
if ($archive->extract() == 0) { /*解壓縮路徑跟原始檔相同路徑*/
die("Error : ".$archive->errorInfo(true));
}
?>

當然也可以指定解壓縮路徑,像這樣 複製代碼 代碼如下:<?php
include('pclzip.lib.php');
$archive = new PclZip('archive.zip');
if ($archive->extract(PCLZIP_OPT_PATH, 'data') { /*data換成其他路徑即可*/
die("Error : ".$archive->errorInfo(true));
}
?>

如果再寫一支自動建立目錄的script會更好,因為函式本身不會判斷壓縮檔裡第一層是檔桉還是資料夾(這我想其他相關函式也做不到吧!!!)
再來是Rar,這問題比較大,由於php本身沒提供rar相關函式,所以需要求助第三方函式來用
所幸有這個 PECL(The PHP Extension Community Library)
裡面有個 rar 的 package 可以使用
不過須得手動安裝才行
若是 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

當然若是 freebsd 話,用 port 裝會更快

cd /usr/ports/archivers/pecl-rar
make
make install

記得安裝完後須 restart apache
安裝完後可以做測試 複製代碼 代碼如下:<?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 安裝話,版本會比較新(官網只有到0.3.1,port 安裝話已經到0.3.4),所以用法上會有些出入
但extract用法上並無差異
相關用法像這樣 複製代碼 代碼如下:<?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部分一樣,若搭配自動建立目錄會更好

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.