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 相关文章推荐
PHP+AJAX实现无刷新注册(带用户名实时检测)
Dec 02 PHP
mcrypt启用 加密以及解密过程详细解析
Aug 07 PHP
PHP的cURL库简介及使用示例
Feb 06 PHP
PHP判断一个字符串是否是回文字符串的方法
Mar 23 PHP
PHP的文件操作与算法实现的面试题示例
Aug 10 PHP
学习php设计模式 php实现备忘录模式(Memento)
Dec 09 PHP
PHP创建多级目录的两种方法
Oct 28 PHP
php正则去除网页中所有的html,js,css,注释的实现方法
Nov 03 PHP
PHP结合Ffmpeg快速搭建流媒体服务的实践记录
Oct 31 PHP
php高清晰度无损图片压缩功能的实现代码
Dec 09 PHP
统计PHP目录中的文件数方法
Mar 05 PHP
PHP pthreads v3使用中的一些坑和注意点分析
Feb 21 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
星际争霸, 教主第一视角, ZvT经典龙蛇演义
2020/03/02 星际争霸
PHP文件上传之多文件上传的实现思路
2016/01/27 PHP
Yii2.0实现生成二维码功能实例
2017/10/24 PHP
Yii框架连表查询操作示例
2019/09/06 PHP
如何在PHP中生成随机数
2020/06/04 PHP
JavaScript的目的分析
2007/01/05 Javascript
用javascript实现分割提取页面所需内容
2007/05/09 Javascript
JQuery最佳实践之精妙的自定义事件
2010/08/11 Javascript
jquery的Theme和Theme Switcher使用小结
2010/09/08 Javascript
深入理解Javascript中this的作用域
2014/08/12 Javascript
javascript面向对象之定义成员方法实例分析
2015/01/13 Javascript
javascript图片预加载完整实例
2015/12/10 Javascript
JS验证逗号隔开可以是中文字母数字
2016/04/22 Javascript
JS判断iframe是否加载完成的方法
2016/08/03 Javascript
浅谈js中function的参数默认值
2017/02/20 Javascript
微信小程序 UI与容器组件总结
2017/02/21 Javascript
Angular动态添加、删除输入框并计算值实例代码
2017/03/29 Javascript
vue2.0+ 从插件开发到npm发布的示例代码
2018/04/28 Javascript
详解微信小程序支付流程与梳理
2019/07/16 Javascript
基于Node的Axure文件在线预览的实现代码
2019/08/28 Javascript
[31:33]2014 DOTA2国际邀请赛中国区预选赛 TongFu VS DT 第一场
2014/05/23 DOTA
python rsa 加密解密
2017/03/20 Python
requests和lxml实现爬虫的方法
2017/06/11 Python
python多维数组切片方法
2018/04/13 Python
Selenium 模拟浏览器动态加载页面的实现方法
2018/05/16 Python
windows下pycharm安装、创建文件、配置默认模板
2018/07/31 Python
python3判断url链接是否为404的方法
2018/08/10 Python
Python面向对象程序设计之继承、多态原理与用法详解
2020/03/23 Python
DC Shoes荷兰官方网站:美国极限运动品牌
2019/10/22 全球购物
颇特女士香港官网:NET-A-PORTER香港
2021/03/08 全球购物
给医务人员表扬信
2014/01/12 职场文书
护士自我评价
2014/02/01 职场文书
党支部书记岗位责任制
2014/02/11 职场文书
大学军训感言400字
2014/03/11 职场文书
预备党员群众意见
2015/06/01 职场文书
Win10 最新稳定版本 21H2开始推送
2022/04/19 数码科技