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 09 PHP
修改了一个很不错的php验证码(支持中文)
Feb 14 PHP
Mysql的GROUP_CONCAT()函数使用方法
Mar 28 PHP
php 验证码实例代码
Jun 01 PHP
php 字符串替换的方法
Jan 10 PHP
PHP的PSR规范中文版
Sep 28 PHP
php防止sql注入代码实例
Dec 18 PHP
PHP处理SQL脚本文件导入到MySQL的代码实例
Mar 17 PHP
destoon利用Rewrite规则设置网站安全
Jun 21 PHP
mantis安装、配置和使用中的问题小结
Jul 14 PHP
php cookie工作原理与实例详解
Jul 18 PHP
Yii2框架中使用PHPExcel导出Excel文件的示例
Aug 09 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
Linux下将excel数据导入到mssql数据库中的方法
2010/02/08 PHP
php输出表格的实现代码(修正版)
2010/12/29 PHP
PHP 无限分类三种方式 非函数的递归调用!
2011/08/26 PHP
PHP+JS三级菜单联动菜单实现方法
2016/02/24 PHP
Riot.js 快速的JavaScript单元测试框架
2009/11/09 Javascript
jQuery插件-jRating评分插件源码分析及使用方法
2012/12/28 Javascript
jquery入门—选择器实现隔行变色实例代码
2013/01/04 Javascript
Web Inspector:关于在 Sublime Text 中调试Js的介绍
2013/04/18 Javascript
node.js中的console.timeEnd方法使用说明
2014/12/09 Javascript
利用JS生成博文目录及CSS定制博客
2016/02/10 Javascript
基于jquery实现即时检查格式是否正确的表单
2016/05/06 Javascript
JavaScript学习笔记整理_关于表达式和语句
2016/09/19 Javascript
JavaScript下拉菜单功能实例代码
2017/03/01 Javascript
Angular 利用路由跳转到指定页面的指定位置方法
2018/08/31 Javascript
微信小程序云开发实现增删改查功能
2019/05/17 Javascript
js回调函数仿360开机
2019/12/26 Javascript
jQuery事件模型默认行为执行顺序及trigger()与 triggerHandler()比较实例分析
2020/04/30 jQuery
PHP 502bad gateway原因及解决方案
2020/11/13 Javascript
原生JS实现pc端轮播图效果
2020/12/21 Javascript
[02:56]DOTA2矮人直升机 英雄基础教程
2013/11/26 DOTA
用Python写飞机大战游戏之pygame入门(4):获取鼠标的位置及运动
2015/11/05 Python
对python while循环和双重循环的实例详解
2019/08/23 Python
Python内置数据类型list各方法的性能测试过程解析
2020/01/07 Python
用python给csv里的数据排序的具体代码
2020/07/17 Python
django数据模型中null和blank的区别说明
2020/09/02 Python
用HTML5制作一个简单的桌球游戏的教程
2015/05/12 HTML / CSS
MyHeritage美国:家族史研究和DNA测试的领先服务
2019/05/27 全球购物
俄罗斯披萨、寿司和面食送货到家服务:2 Берега
2019/12/15 全球购物
存储过程的优点有哪些
2012/09/27 面试题
学生励志演讲稿
2014/01/06 职场文书
设计专业毕业生求职信
2014/06/25 职场文书
班组长安全工作职责
2014/07/15 职场文书
出租房屋协议书
2014/09/14 职场文书
门卫管理制度范本
2015/08/05 职场文书
农贸批发市场管理制度
2015/08/07 职场文书
人生一定要学会的三样东西:放下、忘记、珍惜
2019/08/21 职场文书