PHP 的解压缩ZipArchive中的extractTo()方法 LINUX+nginx环境中解压zip时文件丢失的问题

在项目中要用ZipArchive解压ZIP文件,起初測试环境在WINDOWS平台中,測试通过,换到 LINUX+nginx 的环境中时 就出问题了(ZIP包中有文件和目录一共3百多个文件,大部分是带汉字的文件名称),问题的现象是:不带汉字的文件解压没有问题,另外有部分带汉字和数字字母的文件解压没有问题,然后其它纯文字的文件名称就丢失了,也没有报错,最后把问题定位到了extractTo()方法,这种方法尼玛是个封装的方法,看不到实际的源码。

可是,发现 for($i = 0; $i < $zip->numFiles; $i++) 这里却能够找到全部的文件,个数是正常的,那么问题就出现解压后的 copy环节了。那么是不是能够借助这个循环自己解压,自己copy文件呢??

于是

for($i = 0; $i < $zip->numFiles; $i++) {

$filename = $zip->getNameIndex($i);

if(!is_dir($filename)){

copy("zip://".$path."#".$filename, $topath.$filename);

}else{

@mkdir($topath.‘/‘.$filename, 0777);

}

}

问题攻克了哈。  找这个问题浪费了 我一天时间!! 希望对碰到相同 文件在解压的时候丢失的同学有帮助哈。

时间: 2024-08-03 17:38:27

PHP 的解压缩ZipArchive中的extractTo()方法 LINUX+nginx环境中解压zip时文件丢失的问题的相关文章

PHP扩展类ZipArchive实现压缩解压Zip文件和文件打包下载

PHP扩展类ZipArchive实现压缩解压Zip文件和文件打包下载 http://my.oschina.net/junn/blog/104464 PHP ZipArchive 是PHP自带的扩展类,可以轻松实现ZIP文件的压缩和解压,使用前首先要确保PHP ZIP 扩展已经开启,具体开启方法就不说了,不同的平台开启PHP扩增的方法网上都有,如有疑问欢迎交流.这里整理一下常用的示例供参考. 一.解压缩zip文件 ? 1 2 3 4 5 6 7 8 9 10 11 $zip = new ZipAr

[教程] wdcp文件管理器里不能删除或移动解压后的文件解决方法

问题:在本地上传压缩包到服务器之后,在wdcp文件管理器里解压,解压之后想把文件移动到其他目录,填写好移动的目标目录之后点移动,显示移动成功,但到目标目录却发现没有自己所移动的文件,文件不知道消失到哪里去了:再看原本解压后的文件夹里也没有文件. 解决方法:看看是不是自己的压缩前的文件夹里有文件名或文件夹名包含中文字符,把他改成英文后再压缩上传,解压之后移动就没问题了:同样,删除不了的文件也可能是你文件名里包含了中文,甚至上传解压之后的文件名已经不是正常中文了,而是乱码! 转自:http://ww

解压tar.gz文件报错gzip: stdin: not in gzip format解决方法

解压tar.gz文件报错gzip: stdin: not in gzip format解决方法 在解压tar.gz文件的时候报错 1 2 3 4 5 [[email protected] Downloads]$ tar -zxvf clion-141.351.4.tar.gz gzip: stdin: not in gzip format tar: Child returned status 1 tar: Error is not recoverable: exiting now 原来原因是这个

Ubuntu中解决解压zip文件中文乱码问题

1. 通过unzip行命令解压,指定字符集 unzip -O CP936 xxx.zip (用GBK, GB18030也可以) 有趣的是unzip的manual中并无这个选项的说明, unzip --help对这个参数有一行简单的说明. 2. 在环境变量中,指定unzip参数,总是以指定的字符集显示和解压文件 /etc/environment中加入2行 UNZIP="-O CP936" ZIPINFO="-O CP936"Ubuntu中解决解压zip文件中文乱码问题

PHP扩展类ZipArchive实现压缩解压Zip文件和文件打包下载 &amp;&amp; Linux下的ZipArchive配置开启压缩

PHP ZipArchive 是PHP自带的扩展类,可以轻松实现ZIP文件的压缩和解压,使用前首先要确保PHP ZIP 扩展已经开启,具体开启方法就不说了,不同的平台开启PHP扩增的方法网上都有,如有疑问欢迎交流.这里整理一下常用的示例供参考. 一.解压缩zip文件 ? 1 2 3 4 5 6 7 8 9 10 11 $zip = new ZipArchive;//新建一个ZipArchive的对象 /* 通过ZipArchive的对象处理zip文件 $zip->open这个方法的参数表示处理的

java关于压缩包的处理,我这里贴出三中格式的(zip,rar,tar)解压方法(目前只用到解压,所以压缩过多研究)。

1.首先我们先来说下为什么会有这三中格式: (1)rar格式:rar格式是最先出现的压缩方式,它主要是用于商业机构一些文件的压缩,它可以根据不同公司的要求,去设定制定不同的压缩算法,这种算法是不对外公开的,安全性比较高,但他是收费的. (2)zip格式:因为rar格式收费,必然会诞生一些免费的压缩格式,那么zip就是在这样的情况下诞生的.同样压缩算法也是公开的,不收取任何费用,效果当然也比rar格式稍差. (3)tar格式:tar是国产推出的一种免费的压缩格式. 2.java编程实现rar,zi

学习写一个能够将文件复制、解压到指定文件夹中的批处理文件

场景1:afoldersource中有若干文件夹和若干压缩文件,现在将afoldersource中的文件全部复制到afolderdist中. afoldersource: 脚本: @ECHO OFF ##关闭命令回显 echo copy file ##显示一句话 SET sourcepath=E:\afoldersource ##定义源地址 SET destpath=E:\afolderdist ##定义目标地址 rmdir %destpath%\folder /s /q ##删除目标地址中的文

saltstack在解压zip文件时保留原始修改时间的方法

saltstack在使用archive.unzip功能时,会将压缩包中文件的"修改时间"替换为当前解压的系统时间,为了能够保留文件原来的"修改时间",需要对salt-manion的源码中archive.py文件的unzip方法进行修改: 文件位置: windows    C:/salt/bin/Lib/site-packages/salt/modules/archive.py linux:  /user/lib/python2.7/site-packages/sal

linux生产环境中替换jdk

声明一下,为了给大家演示以及对生产环境的保密,我在本地vm中搭建了跟生产环境一模一样的虚拟机来给大家操作,其中截图来自本地虚拟机.操作步骤严格按照生产环境替换来做. 首先,给大家介绍下生产环境的大体架构,前端采用nginx分发,后端两个tomcat处理请求应用服务器,这只是最基本也是最常见的负载均衡架构. 下面开始实际操作:(注:请使用root账户操作) 第一步:首先看一下系统的java版本.系统采用openJDK,并且为1.7.0_85版本 第二步:安装sunjdk 1使用命令新建一个文件夹s