• PHP ZipArchive 解压Zip文件


    PHP ZipArchive 是PHP自带的扩展类,可以轻松实现ZIP文件的压缩和解压.

    这里记录一下自己在项目中用到它来解压缩,然后读取里面的文件。

    $zip = new ZipArchive;//新建一个ZipArchive的对象
    $pic_dir = '/'; // 文件所在的绝对路径
    if ($zip->open($zip_name) === TRUE)
    {
        $file_arr = array();
        // 压缩包里面有多个文件的情况
        for($i=0; $i<$zip->numFiles; $i++){
            // 解压后的文件夹名称
            $file_name = pathinfo($zip->getNameIndex($i))['basename'];
            // 文件全路径
            $file_path = $pic_dir . pathinfo($zip->getNameIndex(0))['basename'];
            
            file_arr[] = $file_path;
            
            // 文件夹名称不支持中文名称
            if(preg_match('/[^x00-x80]/', $file_name)){
                continue;
            }
        }
        
        // 解压缩到某个位置
        $zip->extractTo($pic_dir);
        
        // 关闭
        $zip->close();
    }
    
    // 解压缩后就可以逐个读取文件夹里面的文件
    $files = scandir($file_arr[0])

     ===========================================================

     后续发现的问题 文件夹中的文件名称如果包含某些中文或者字符, $zip->extractTo 会解压失败,报错 file open failed...... 这些,就是打开不了文件。

    太懒了,这里先简单记录一下自己的解决过程:

    1,先对文件名   urlencode(base64_encode($filename))   ;然后重命名压缩包里的文件 $zip->renameName($filename, $newfilename); ,这样就可以对中文那些压缩了

    2,通过解压后,记得把文件名称还原回去,不然都是序列后的乱码,自己也找不到文件名称, base64_decode(urldecode($filename)) ;

     Tips: Windows环境下测试要转成gbk, 因为默认windows默认gbk,  $filename = mb_convert_encoding($imgs[$filename], 'gbk', 'utf-8'); 

  • 相关阅读:
    The while statement
    App server 与 Web server之间的区别
    Keyboard input
    Recursion
    Conditionals
    TurtleWorld Exercises
    Python TurtleWorld configuration and simple test
    Why functions
    The python programing language
    性能测试3 方法
  • 原文地址:https://www.cnblogs.com/pyspang/p/12857942.html
Copyright © 2020-2023  润新知