我有一个 zip 文件上传到服务器以进行自动提取。
zip 文件的结构如下:
/zip_file.zip/folder1/image1.jpg
/zip_file.zip/folder1/image2.jpg
/zip_file.zip/folder1/image3.jpg
目前我有这个功能来提取所有扩展名为 jpg 的文件:
$zip = new ZipArchive();
if( $zip->open($file_path) ){
$files = array();
for( $i = 0; $i < $zip->numFiles; $i++){
$entry = $zip->statIndex($i);
// is it an image?
if( $entry['size'] > 0 && preg_match('#\.(jpg)$#i', $entry['name'] ) ){
$f_extract = $zip->getNameIndex($i);
$files[] = $f_extract;
}
}
if ($zip->extractTo($dir_name, $files) === TRUE) {
} else {
return FALSE;
}
$zip->close();
}
但是通过使用函数extractTo
,它将提取到myFolder
作为ff:
/myFolder/folder1/image1.jpg
/myFolder/folder1/image2.jpg
/myFolder/folder1/image3.jpg
有什么方法可以将folder1中的文件提取到myFolder的根目录吗?
理想:
/myFolder/image1.jpg
/myFolder/image2.jpg
/myFolder/image3.jpg
PS:如果文件名冲突,我只需要不提取或覆盖该文件即可。
最佳答案
请使用这个小代码片段。它删除了每个文件的文件名前面的文件夹结构,以便基本上将存档的全部内容提取到一个文件夹中。
<?php
$path = "zip_file.zip";
$zip = new ZipArchive();
if ($zip->open($path) === true) {
for($i = 0; $i < $zip->numFiles; $i++) {
$filename = $zip->getNameIndex($i);
$fileinfo = pathinfo($filename);
copy("zip://".$path."#".$filename, "/myDestFolder/".$fileinfo['basename']);
}
$zip->close();
}
?>
关于php - 将 zip 中的文件提取到文件夹的根目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6682491/