发布时间: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.'; } } }