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数据缓存技术
Feb 14 PHP
用header 发送cookie的php代码
Mar 16 PHP
php格式化工具Beautify PHP小小BUG
Apr 24 PHP
PHP中SESSION使用中的一点经验总结
Mar 30 PHP
解析coreseek for sphinx的使用
Jun 21 PHP
php计算两个日期时间差(返回年、月、日)
Jun 19 PHP
php不使用copy()函数复制文件的方法
Mar 13 PHP
PHP使用DirectoryIterator显示下拉文件列表的方法
Mar 13 PHP
PHP常用的排序和查找算法
Aug 06 PHP
php实现简单加入购物车功能
Mar 07 PHP
php 中phar包的使用教程详解
Oct 26 PHP
浅谈laravel框架sql中groupBy之后排序的问题
Oct 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
PHP 程序授权验证开发思路
2009/07/09 PHP
PHP 中关于ord($str)&amp;gt;0x80的详细说明
2012/09/23 PHP
探讨如何在php168_cms中提取验证码
2013/06/08 PHP
php链式操作的实现方式分析
2019/08/12 PHP
PHP 图片处理
2020/09/16 PHP
JavaScript 类似flash效果的立体图片浏览器
2010/02/08 Javascript
手把手教你自己写一个js表单验证框架的方法
2010/09/14 Javascript
js中判断文本框是否为空的两种方法
2011/07/31 Javascript
Javascript base64编码实现代码
2011/12/02 Javascript
Nodejs学习笔记之Stream模块
2015/01/13 NodeJs
JavaScript中return false的用法
2015/03/12 Javascript
avalonjs制作响应式瀑布流特效
2015/05/06 Javascript
浅谈JavaScript中数组的增删改查
2016/06/20 Javascript
Base64(二进制)图片编码解析及在各种浏览器的兼容性处理
2017/02/09 Javascript
jquery实现轮播图效果
2017/02/13 Javascript
javascript实现二叉树的代码
2017/06/08 Javascript
微信小程序后台解密用户数据实例详解
2017/06/28 Javascript
vue操作下拉选择器获取选择的数据的id方法
2018/08/24 Javascript
JS 验证码功能的三种实现方式
2018/11/26 Javascript
element-ui多文件上传的实现示例
2019/04/10 Javascript
python中数据爬虫requests库使用方法详解
2018/02/11 Python
python读取LMDB中图像的方法
2018/07/02 Python
python argparser的具体使用
2019/11/10 Python
Python爬虫之Selenium中frame/iframe表单嵌套页面
2020/12/04 Python
你应该知道的30个css选择器
2014/03/19 HTML / CSS
使用CSS3和Checkbox实现JQuery的一些效果
2015/08/03 HTML / CSS
美国在线珠宝商店:SZUL
2017/02/11 全球购物
《花瓣飘香》教学反思
2014/04/15 职场文书
党员先锋岗事迹材料
2014/05/08 职场文书
校园新闻广播稿5篇
2014/10/10 职场文书
事业单位聘任报告
2015/03/02 职场文书
雷锋的观后感
2015/06/10 职场文书
利用Python将list列表写入文件并读取的方法汇总
2022/03/25 Python
Win11电脑显示本地时间与服务器时间不一致怎么解决?
2022/04/05 数码科技
阿里云日志过滤器配置日志服务
2022/04/09 Servers
使用ICOM IC-R9500接收机同时测评十台收音机中波接收性能
2022/05/10 无线电