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