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

本文介绍了一种在Linux环境下使用PHP处理ZIP文件解压时遇到的文件名丢失问题及其解决方案。该问题主要发生在包含中文字符的文件名上,在尝试使用ZipArchive的extractTo方法时出现问题。通过手动遍历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);
    }
   }     

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值