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 相关文章推荐
首页四格,首页五格For6.0(GBK)(UTF-8)[12种组合][9-18][版主安装测试通过]
Sep 24 PHP
php 伪造本地文件包含漏洞的代码
Nov 03 PHP
IIS安装Apache伪静态插件的具体操作图文
Jul 01 PHP
php获取网页标题和内容函数(不包含html标签)
Feb 03 PHP
PHP中文乱码解决方案
Mar 05 PHP
Yii2实现ajax上传图片插件用法
Apr 28 PHP
PHP使用FFmpeg获取视频播放总时长与码率等信息
Sep 13 PHP
浅谈PHP中静态方法和非静态方法的相互调用
Oct 04 PHP
PHP实现登录注册之BootStrap表单功能
Sep 03 PHP
WHOOPS PHP调试库的使用
Sep 29 PHP
PHP使用SOAP调用API操作示例
Dec 25 PHP
PHP设计模式(七)组合模式Composite实例详解【结构型】
May 02 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 和 HTML
2006/10/09 PHP
PHP array_push 数组函数
2009/12/26 PHP
ThinkPHP分页实例
2014/10/15 PHP
Ajax和PHP正则表达式验证表单及验证码
2016/09/24 PHP
PHP strcmp()和strcasecmp()的区别实例
2016/11/05 PHP
php实现替换手机号中间数字为*号及隐藏IP最后几位的方法
2016/11/16 PHP
PHP面向对象之工作单元(实例讲解)
2017/06/26 PHP
Javascript调用XML制作连动下拉列表框
2006/06/25 Javascript
js 未结束的字符串常量错误解决方法
2010/06/13 Javascript
在JavaScript中监听IME键盘输入事件
2011/05/29 Javascript
JS跨域总结
2012/08/30 Javascript
js实现非常简单的焦点图切换特效实例
2015/05/07 Javascript
javascript创建动态表单的方法
2015/07/25 Javascript
drag-and-drop实现图片浏览器预览
2015/08/06 Javascript
jQuery选择器之属性过滤选择器详解
2017/09/28 jQuery
vue axios同步请求解决方案
2017/09/29 Javascript
移动web开发之touch事件实例详解
2018/01/17 Javascript
angular项目中bootstrap-datetimepicker时间插件的使用示例
2018/03/15 Javascript
Vue2 轮播图slide组件实例代码
2018/05/31 Javascript
webpack-url-loader 解决项目中图片打包路径问题
2019/02/15 Javascript
纯js+css实现仿移动端淘宝网站的弹出详情框功能
2019/12/29 Javascript
[04:51]TI10典藏宝瓶Ⅱ外观视频展示
2020/08/15 DOTA
python基础教程之Filter使用方法
2017/01/17 Python
Python中enumerate函数代码解析
2017/10/31 Python
Python 判断 有向图 是否有环的实例讲解
2018/02/01 Python
Python 查找list中的某个元素的所有的下标方法
2018/06/27 Python
python实现公司年会抽奖程序
2019/01/22 Python
解决matplotlib.pyplot在Jupyter notebook中不显示图像问题
2020/04/22 Python
html5手机键盘弹出收起的处理
2020/01/20 HTML / CSS
亚瑟士美国官网:ASICS美国
2017/02/01 全球购物
班会关于环保演讲稿
2013/12/29 职场文书
2014法制宣传日活动总结
2014/07/09 职场文书
民事二审代理词
2015/05/25 职场文书
交流会主持词
2015/07/02 职场文书
田径运动会通讯稿
2015/07/18 职场文书
MySQL 外键约束和表关系相关总结
2021/06/20 MySQL