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在字符串中查找指定字符串并删除的代码
Oct 02 PHP
通过JavaScript或PHP检测Android设备的代码
Mar 09 PHP
IIS7.X配置PHP运行环境小结
Jun 09 PHP
php Ubb代码编辑器函数代码
Jul 05 PHP
解析PHP中一些可能会被忽略的问题
Jun 21 PHP
PHP数字字符串左侧补0、字符串填充和自动补齐的几种方法
May 10 PHP
PHP获取一年中每个星期的开始和结束日期的方法
Feb 12 PHP
PHP使用array_fill定义多维数组的方法
Mar 18 PHP
PHP如何使用Memcached
Apr 05 PHP
DEDE实现转跳属性文档在模板上调用出转跳地址
Nov 04 PHP
thinkphp3.2实现跨控制器调用其他模块的方法
Mar 14 PHP
Laravel5.1 框架表单验证操作实例详解
Jan 07 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
BBS(php &amp; mysql)完整版(五)
2006/10/09 PHP
php中addslashes函数与sql防注入
2014/11/17 PHP
Thinkphp批量更新数据的方法汇总
2016/06/29 PHP
IE与Firefox下javascript getyear年份的兼容性写法
2007/12/20 Javascript
JS获得URL超链接的参数值实例代码
2013/06/21 Javascript
jQuery实现鼠标滑过遮罩并高亮显示效果
2013/07/16 Javascript
深入理解JSON数据源格式
2014/01/10 Javascript
JavaScript Math.ceil 方法(对数值向上取整)
2015/01/09 Javascript
Node.js 去掉种子(torrent)文件里的邪恶信息
2015/03/27 Javascript
jQuery深拷贝Json对象简单示例
2016/07/06 Javascript
两种JavaScript的AES加密方式(可与Java相互加解密)
2016/08/02 Javascript
JavaScript用构造函数如何获取变量的类型名
2016/12/23 Javascript
angular实现表单验证及提交功能
2017/02/01 Javascript
让div运动起来 js实现缓动效果
2017/07/06 Javascript
详解webpack require.ensure与require AMD的区别
2017/12/13 Javascript
JavaScript原型继承和原型链原理详解
2020/02/04 Javascript
webpack+express实现文件精确缓存的示例代码
2020/06/11 Javascript
获取python的list中含有重复值的index方法
2018/06/27 Python
python批量下载网站马拉松照片的完整步骤
2018/12/05 Python
django页面跳转问题及注意事项
2019/07/18 Python
python3.6中@property装饰器的使用方法示例
2019/08/17 Python
Tensorflow实现部分参数梯度更新操作
2020/01/23 Python
Python Selenium 设置元素等待的三种方式
2020/03/18 Python
python+opencv实现移动侦测(帧差法)
2020/03/20 Python
Python日志器使用方法及原理解析
2020/09/27 Python
使用phonegap播放音频的实现方法
2017/03/31 HTML / CSS
施华洛世奇西班牙官网:SWAROVSKI西班牙
2019/06/06 全球购物
餐厅执行经理岗位职责范本
2014/02/26 职场文书
公司年会抽奖活动主持词
2014/03/31 职场文书
学院党的群众路线教育实践活动整改方案
2014/10/04 职场文书
2014年销售人员工作总结
2014/11/27 职场文书
活动总结模板大全
2015/05/11 职场文书
紫日观后感
2015/06/05 职场文书
文化苦旅读书笔记
2015/06/29 职场文书
解决Pytorch半精度浮点型网络训练的问题
2021/05/24 Python
【海涛dota解说】DCG联赛第一周 LGD VS DH
2022/04/01 DOTA