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 相关文章推荐
数字转英文
Dec 06 PHP
php计算2个日期的差值函数分享
Feb 02 PHP
php运行时动态创建函数的方法
Mar 16 PHP
ThinkPHP连接Oracle数据库
Apr 22 PHP
浅析php静态方法与非静态方法的用法区别
May 17 PHP
php实现URL加密解密的方法
Nov 17 PHP
PHP获取表单数据与HTML嵌入PHP脚本的实现
Feb 09 PHP
php封装json通信接口详解及实例
Mar 07 PHP
PHP实现的贪婪算法实例
Oct 17 PHP
PHP+redis实现微博的拉模型案例详解
Jul 10 PHP
关于php开启错误提示的总结
Sep 24 PHP
PHP实现二维数组(或多维数组)转换成一维数组的常见方法总结
Dec 04 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中inlcude()性能对比详解
2012/09/16 PHP
PHP中is_file()函数使用指南
2015/05/08 PHP
php连接mysql之mysql_connect()与mysqli_connect()的区别
2020/07/19 PHP
网站上面有这种切换效果
2006/06/26 Javascript
jquery的$getjson调用并获取远程的JSON字符串问题
2012/12/10 Javascript
JavaScript 在网页上单击鼠标的地方显示层及关闭层
2012/12/30 Javascript
jQuery层次选择器选择元素使用介绍
2013/04/18 Javascript
js的隐含参数(arguments,callee,caller)使用方法
2014/01/28 Javascript
基于JQuery实现的图片自动进行缩放和裁剪处理
2014/01/31 Javascript
一段非常简单的js判断浏览器的内核
2014/08/17 Javascript
jQuery 中DOM 操作详解
2015/01/13 Javascript
js计算德州扑克牌面值的方法
2015/03/04 Javascript
AngularJS使用ngMessages进行表单验证
2015/12/27 Javascript
jQuery文件上传控件 Uploadify 详解
2016/06/20 Javascript
12个非常有用的JavaScript技巧
2017/05/17 Javascript
javascript计算渐变颜色的实例
2017/09/22 Javascript
JS验证输入的是否是数字及保留几位小数问题
2018/05/09 Javascript
浅析Vue 生命周期
2018/06/21 Javascript
jQuery实现图片简单轮播功能示例
2018/08/13 jQuery
JS工厂模式开发实践案例分析
2019/10/17 Javascript
uniapp实现横向滚动选择日期
2020/10/21 Javascript
跟老齐学Python之玩转字符串(3)
2014/09/14 Python
使用Python脚本在Linux下实现部分Bash Shell的教程
2015/04/17 Python
浅析Python编写函数装饰器
2016/03/18 Python
Python 结巴分词实现关键词抽取分析
2017/10/21 Python
Python查看微信撤回消息代码
2018/06/07 Python
python3.x 将byte转成字符串的方法
2018/07/17 Python
django Serializer序列化使用方法详解
2018/10/16 Python
python使用selenium实现批量文件下载
2019/03/11 Python
Python使用matplotlib 模块scatter方法画散点图示例
2019/09/27 Python
马来西亚在线健康商店:Medipal Malaysia
2020/04/13 全球购物
电子工程求职信
2014/07/17 职场文书
求职自我推荐信
2015/03/24 职场文书
违反纪律检讨书范文
2015/05/07 职场文书
小学六一主持词开场白
2015/05/28 职场文书
2015年学校管理工作总结
2015/07/20 职场文书