PHP执行zip与rar解压缩方法实现代码


Posted in PHP onDecember 05, 2010

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部分一样,若搭配自动建立目录会更好
PHP 相关文章推荐
数据库相关问题
Oct 09 PHP
防止本地用户用fsockopen DDOS攻击对策
Nov 02 PHP
PHP定时执行计划任务的多种方法小结
Dec 19 PHP
php开发时容易忘记的一些技术细节
Feb 03 PHP
PHP查询并删除数据库多列重复数据的方法(利用数组函数实现)
Feb 23 PHP
Zend Framework框架之Zend_Mail实现发送Email邮件验证功能及解决标题乱码的方法
Mar 21 PHP
PHP读取文件的常见几种方法
Nov 03 PHP
PHP迭代与递归实现无限级分类
Aug 28 PHP
CI框架(CodeIgniter)操作redis的方法详解
Jan 25 PHP
PHP实现根据数组某个键值大小进行排序的方法
Mar 13 PHP
PHP+Apache实现二级域名之间共享cookie的方法
Jul 24 PHP
一次项目中Thinkphp绕过禁用函数的实战记录
Nov 17 PHP
smarty模板嵌套之include与fetch性能测试
Dec 05 #PHP
php 学习资料零碎东西
Dec 04 #PHP
PHP访问MYSQL数据库封装类(附函数说明)
Dec 04 #PHP
PHP验证码类代码( 最新修改,完全定制化! )
Dec 02 #PHP
PHP项目开发中最常用的自定义函数整理
Dec 02 #PHP
PHP自动选择 连接本地还是远程数据库
Dec 02 #PHP
Mysql数据库操作类( 1127版,提供源码下载 )
Dec 02 #PHP
You might like
如何对PHP程序中的常见漏洞进行攻击(上)
2006/10/09 PHP
PHP判断远程图片或文件是否存在的实现代码
2014/02/20 PHP
PHP中创建图像并绘制文字的例子
2014/11/19 PHP
Zend Framework实现将session存储在memcache中的方法
2016/03/22 PHP
PHP商品秒杀问题解决方案实例详解【mysql与redis】
2019/07/22 PHP
Javascript的IE和Firefox兼容性汇编(zz)
2007/02/02 Javascript
从JavaScript 到 JQuery (1)学习小结
2009/02/12 Javascript
jquery实现文本框鼠标右击无效以及不能输入的代码
2010/11/05 Javascript
jquery异步调用页面后台方法&amp;#8207;(asp.net)
2011/03/01 Javascript
js调用activeX获取u盘序列号的代码
2011/11/21 Javascript
js this函数调用无需再次抓获id,name或标签名
2014/03/03 Javascript
php实例分享之实现显示网站运行时间
2014/05/20 Javascript
用C/C++来实现 Node.js 的模块(一)
2014/09/24 Javascript
Javascript学习指南
2014/12/01 Javascript
innerHTML中标签可以换行的方法汇总
2015/08/14 Javascript
老生常谈js中0到底是 true 还是 false
2017/03/08 Javascript
Vue应用部署到服务器的正确方式
2017/07/15 Javascript
详解ES6中的三种异步解决方案
2018/06/28 Javascript
Vue项目总结之webpack常规打包优化方案
2019/06/06 Javascript
vue实现移动端input上传视频、音频
2020/08/18 Javascript
Python中的高级数据结构详解
2015/03/27 Python
Python中的字符串操作和编码Unicode详解
2017/01/18 Python
Python学习笔记之抓取某只基金历史净值数据实战案例
2019/06/03 Python
详解python调用cmd命令三种方法
2019/07/08 Python
python中enumerate() 与zip()函数的使用比较实例分析
2019/09/03 Python
谈谈Python:为什么类中的私有属性可以在外部赋值并访问
2020/03/05 Python
pyspark给dataframe增加新的一列的实现示例
2020/04/24 Python
详解Python 中的 defaultdict 数据类型
2021/02/22 Python
美国现代家具购物网站:LexMod
2019/01/09 全球购物
俄罗斯珠宝市场的领导者之一:Бронницкий ювелир
2019/10/02 全球购物
斯洛伐克最大的婴儿食品和用品网上商店:Feedo.sk
2020/12/21 全球购物
九年级语文教学反思
2014/02/04 职场文书
应届生自荐信范文
2014/02/21 职场文书
自荐信的格式
2014/03/10 职场文书
聘用合同范本
2015/09/21 职场文书
2016年“世界气象日”广播稿
2015/12/17 职场文书