php 解压zip/rar
来源:互联网 发布:厦门btn广电网络 编辑:程序博客网 时间:2024/06/02 05:59
刚开始学习php,在做php在线解压压缩包并读取文件的目录结构的功能,记录下遇到的问题
1. 刚开始以为可以直接读取压缩包的目录结构(可能我还没找到方法吧),浪费了好多时间
2. 后来把压缩包解压到指定的目录中,在读取指定目录指定文件夹(压缩包名)的目录结构,之后删除该文件
3. 在线解压zip可以使用php自带的ZipAchive
文章链接:
http://www.jb51.net/article/61678.htm
http://my.oschina.net/junn/blog/104464
使用上面方法可以解决解压问题,但是也有个坑:
Windows的文件系统是gbk编码的,而PHP ZipArchive中的文件名是UTF-8编码的。换句话说,当有中文字符时会出现乱码
解决方法:
不要用自带的ZipArchive::extractTo()方法去解压ZipArchive文档,改用PHP的zip封装协议解压去解决ZipArchive乱码。网上有说php7.1之后就解决了中文的问题,我还没试过
<?php$zip = new \ZipArchive;$zipfile = "./test.zip";$res = $zip->open($zipfile);$toDir = "./test";if(!file_exists($toDir)) { mkdir($toDir);}$docnum = $zip->numFiles;for($i = 0; $i < $docnum; $i++) { $statInfo = $zip->statIndex($i); if($statInfo['crc'] == 0) { //新建目录 mkdir($toDir.'/'.substr($statInfo['name'], 0,-1)); } else { //拷贝文件 copy('zip://'.$zipfile.'#'.$statInfo['name'], $toDir.'/'.$statInfo['name']); }}print_r(scandir($toDir));作者:Dorm_Script
4. 在线解压rar文件php不能直接使用,通过查文章发现需要使用php_rar.dll
文章链接:http://blog.csdn.net/cuixiping/article/details/15664119
文章说的很清楚,但是还是有几个坑,我还是记录下
1> 我的电脑是64位的,但是使用的wamp集成环境是32位的,选择dll时候应该选择的x86(32位)的才对
2> 文章中说选择非线程安全的(NTS)的dll,而我使用一直显示php_rar.dll未加载
查询phpinfo 发现
Thread Safetyenabled因此应该选择的是线程安全(TS)的dll,使用后果然没再出错
3> 选择的php版本要对应,使用高版本的dll和低版本的php我没有测试不知道会不会出错,
我使用的是php5.5.12,下载的是php_rar-3.0.2-5.5-ts-vc11-x86这个dll
4> wamp中的php.ini并不是php文件夹中的那个,而是在Apache文件夹中
5. 附上代码
/** * 解压zip文件到指定目录 * $filepath: 文件路径 * $extractTo: 解压路径 */function dr_unZip($filepath,$extractTo) { $zip = new ZipArchive; $res = $zip->open($filepath); if ($res === TRUE) { //解压缩到$extractTo指定的文件夹 $zip->extractTo($extractTo); $zip->close(); } else { echo 'failed, code:' . $res; }}/** * 解压rar文件到指定目录 * $filepath: 文件路径 * $extractTo: 解压路径 */function dr_unrar($filepath,$extractTo) { $rar_file = rar_open($filepath) or die('could not open rar'); $list = rar_list($rar_file) or die('could not get list'); foreach($list as $file) { $pattern = '/\".*\"/'; preg_match($pattern, $file, $matches, PREG_OFFSET_CAPTURE); $pathStr=$matches[0][0]; $pathStr=str_replace("\"",'',$pathStr); $entry = rar_entry_get($rar_file, $pathStr) or die('</br>entry not found'); $entry->extract($extractTo); // extract to the current dir } rar_close($rar_file);}
- php 解压zip/rar
- 解压rar,打成zip
- zip rar的解压
- java解压rar.zip
- 解压zip rar文件
- php 在本地解压 反压缩 zip rar
- java解压zip与rar
- ubuntur解压rar, zip乱码
- iOS 中 ZIP RAR 解压
- linux下解压zip,rar
- java解压rar以及zip
- Java解压ZIP、RAR文件
- Java 解压rar 解压缩zip
- java 解压zip、rar文件
- 解压zip跟rar压缩文件
- java之解压zip,rar
- JAVA 解压ZIP RAR文件
- php 解压rar文件
- Java对象锁与类锁
- 伸展树(一)之 图文解析 和 C语言的实现
- C++字符串处理函数
- 技术类博客网站推荐
- FFMPEG官方编译说明链接
- php 解压zip/rar
- CC2640R2F BLE5.0 CC2640R2F软硬件架构概述
- MyEclipse去除网上复制下来的来代码带有的行号
- Binary String Matching
- 动态规划算法-----找零钱问题(求最优解)
- ActiveMQ、RabbitMQ与ZeroMQ等消息队列性能对比
- 荷兰国旗问题
- AAC 文件解析及解码流程
- WCF服务通过 SvcUtil.exe 方式调用,WCF半动态调用