php ZipArchive 解压实用案例

发布时间:2024-07-12 15:34:00

在使用 ZipArchive 类的 extractTo() 方法时,默认情况下确实不会自动创建目录。你需要在解压缩之前确保目标解压缩目录存在,否则会导致解压失败。以下是如何在PHP中修改代码,以确保能够自动创建目标目录并成功解压包含目录结构的zip文件:


public static function zip20240629()
{
    $zipFile = 'E:/task/20240712/zip'; // Path to your .zip file
    $extractTo = 'E:/task/20240712/data'; // Destination folder to extract contents

    $list = scandir($zipFile);
    foreach ($list as $val){
        if(in_array($val,['.','..'])){
            continue;
        }

        $zipfilepath = $zipFile.'/'.$val;

        $dirname = str_replace(['.zip'],'',$val);
        $extractTopath = $extractTo.'/'.$dirname;

        if(!is_dir($extractTopath)){
            mkdir($extractTopath,0755,true);
        }

        $zip = new ZipArchive();
        if ($zip->open($zipfilepath) === TRUE) {

            // 获取zip文件中的文件数
            $totalFiles = $zip->numFiles;
            // 解压缩到指定目录
            for ($i = 0; $i < $totalFiles; $i++) {
                $filename = $zip->getNameIndex($i);
                $pathinfo = pathinfo($filename);
                if(!is_dir($extractTopath.'/'.$pathinfo['dirname'])){
                    mkdir($extractTopath.'/'.$pathinfo['dirname'],0755,true);
                }

                $stream = $zip->getStream($zip->getNameIndex($i));
                file_put_contents($extractTopath.'/'.$filename, stream_get_contents($stream));
            }

            $zip->close();
            echo 'Successfully extracted to ' . $extractTopath.PHP_EOL;exit();
        } else {
            echo 'Failed to open the zip file.';
        }
    }


}