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 相关文章推荐
dede全站URL静态化改造[070414更正]
Apr 17 PHP
MySQL修改密码方法总结
Mar 25 PHP
php下获取Discuz论坛登录用户名、用户组、用户ID等信息的实现代码
Dec 29 PHP
PHP中register_globals参数为OFF和ON的区别(register_globals 使用详解)
Feb 05 PHP
php实现统计邮件大小的方法
Aug 06 PHP
PHP学习笔记(二) 了解PHP的基本语法以及目录结构
Aug 04 PHP
PHP文件缓存内容保存格式实例分析
Aug 20 PHP
PHP IDE PHPStorm配置支持友好Laravel代码提示方法
May 12 PHP
PHP验证码生成原理和实现
Jan 24 PHP
php图片添加文字水印实现代码
Mar 15 PHP
php中文字符串截取多种方法汇总
Oct 06 PHP
Thinkphp 框架扩展之行为扩展原理与实现方法分析
Apr 23 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中SQL注入攻击与XSS攻击
2012/06/10 PHP
解析Linux下Varnish缓存的配置优化
2013/06/20 PHP
PHP中如何防止外部恶意提交调用ajax接口
2016/04/11 PHP
PHP中spl_autoload_register()函数用法实例详解
2016/07/18 PHP
Laravel学习教程之View模块详解
2017/09/18 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
2018/02/07 PHP
jquery tab标签页的制作
2010/05/10 Javascript
验证码按回车不变解决方法
2013/03/29 Javascript
JS.getTextContent(element,preformatted)使用介绍
2013/09/21 Javascript
深入学习jQuery Validate表单验证
2016/01/18 Javascript
JQueryMiniUI按照时间进行查询的实现方法
2017/06/07 jQuery
微信小程序button组件使用详解
2018/01/31 Javascript
解决vue 更改计算属性后select选中值不更改的问题
2018/03/02 Javascript
JS简单数组排序操作示例【sort方法】
2019/05/17 Javascript
超轻量级的js时间库miment使用解析
2019/08/02 Javascript
对vuex中store和$store的区别说明
2020/07/24 Javascript
零基础写python爬虫之HTTP异常处理
2014/11/05 Python
python实现判断数组是否包含指定元素的方法
2015/07/15 Python
Python之Numpy的超实用基础详细教程
2019/10/23 Python
基于Python数据结构之递归与回溯搜索
2020/02/26 Python
CSS实现聊天气泡效果
2020/04/26 HTML / CSS
英国最大的宝石首饰超市:QP Jewellers
2018/09/23 全球购物
美国电子产品主要品牌的授权在线零售商:DataVision
2019/03/23 全球购物
英国健身超市:Fitness Superstore
2019/06/17 全球购物
添柏岚英国官方网站:Timberland英国
2019/11/28 全球购物
SQL Server提供的3种恢复模型都是什么? 有什么区别?
2012/05/13 面试题
大学生毕业的自我评价分享
2014/01/02 职场文书
青年教师培训方案
2014/02/06 职场文书
协议书范本
2014/04/23 职场文书
道路交通事故人身损害赔偿协议书
2014/11/19 职场文书
毕业论文致谢怎么写
2015/05/14 职场文书
小学运动会前导词
2015/07/20 职场文书
靠谱准确的求职信
2019/04/02 职场文书
vue点击弹窗自动触发点击事件的解决办法(模拟场景)
2021/05/25 Vue.js
python 爬取哔哩哔哩up主信息和投稿视频
2021/06/07 Python
MySQL优化常用的19种有效方法(推荐!)
2022/03/17 MySQL