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 相关文章推荐
ThinkPHP3.1新特性之查询条件预处理简介
Jun 19 PHP
PHP中使用数组指针函数操作数组示例
Nov 19 PHP
PHP实现Javascript中的escape及unescape函数代码分享
Feb 10 PHP
php获取字符串中各个字符出现次数的方法
Feb 23 PHP
你应该知道PHP浮点数知识
May 13 PHP
php实现模拟登陆方正教务系统抓取课表
May 19 PHP
php生成gif动画的方法
Nov 05 PHP
WordPress中限制非管理员用户在文章后只能评论一次
Dec 31 PHP
php微信支付接口开发程序
Aug 02 PHP
thinkphp5 migrate数据库迁移工具
Feb 20 PHP
PHP生成随机数的方法总结
Mar 01 PHP
Laravel框架基于中间件实现禁止未登录用户访问页面功能示例
Jan 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
全国FM电台频率大全 - 21 海南省
2020/03/11 无线电
表单复选框向PHP传输数据的代码
2007/11/13 PHP
php IP及IP段进行访问限制的代码
2008/12/17 PHP
解析php中memcache的应用
2013/06/18 PHP
php输出全球各个时区列表的方法
2015/03/31 PHP
Zend Framework自定义Helper类相关注意事项总结
2016/03/14 PHP
PHP通过CURL实现定时任务的图片抓取功能示例
2016/10/03 PHP
PHP基于PDO扩展操作mysql数据库示例
2018/12/24 PHP
JS获取dom 对象 ajax操作 读写cookie函数
2009/11/18 Javascript
JavaScript类的写法
2016/09/17 Javascript
H5移动端适配 Flexible方案
2016/10/24 Javascript
JS对象创建的几种方式整理
2017/02/28 Javascript
详解使用VueJS开发项目中的兼容问题
2018/08/02 Javascript
VueCli3.0中集成MockApi的方法示例
2019/07/05 Javascript
微信公众号获取用户地理位置并列出附近的门店的示例代码
2019/07/25 Javascript
详解Python中的from..import绝对导入语句
2016/06/21 Python
python中hashlib模块用法示例
2017/10/30 Python
使用Python微信库itchat获得好友和群组已撤回的消息
2018/06/24 Python
Django实现表单验证
2018/09/08 Python
使用python获取电脑的磁盘信息方法
2018/11/01 Python
Python用类实现扑克牌发牌的示例代码
2020/06/01 Python
css3 2D图片转动样式可以扩充到Js当中
2014/04/29 HTML / CSS
美国学校校服,儿童和婴儿服装:Cookie’s Kids
2016/10/14 全球购物
总经理办公室主任岗位职责
2013/11/12 职场文书
四议两公开实施方案
2014/03/28 职场文书
求职意向书
2014/04/01 职场文书
五水共治捐款倡议书
2014/05/14 职场文书
运动会标语
2014/06/21 职场文书
大学生见习报告总结
2014/11/04 职场文书
2014年驾驶员工作总结
2014/11/18 职场文书
劳资员岗位职责
2015/02/13 职场文书
2015重阳节敬老活动总结
2015/07/29 职场文书
php远程请求CURL案例(爬虫、保存登录状态)
2021/04/01 PHP
Python实现列表拼接和去重的三种方式
2021/07/02 Python
【2·13】一图读懂中国无线电发展
2022/02/18 无线电
分布式Redis Cluster集群搭建与Redis基本用法
2022/02/24 Redis