php - 将 zip 中的文件提取到文件夹的根目录?

标签 php zip

我有一个 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/

相关文章:

github - 设置可从 GitHub 下载的 ZIP 名称或在 GitHub 上注册 Google Transit 项目的其他方式

javascript - 如何处理来自 Ajax POST 请求的多个文件响应?

php - 多维数组导致 PHP 插入查询中出现 mysql 错误

php - 如何在所有 URL 执行的 CodeIgniter Controller 上运行 cron 作业是从 API 运行查询、更新数据库和发送电子邮件(从 CI 内)?

php - 使用 ffmpeg 从视频中生成提取数量的缩略图

python - 如何使用pytorch同时迭代两个数据加载器?

.net - .NET 3.5中是否有内置的zip库?

php - Mysql 获取包含计数和日期之间的数据

php - Adodb 不支持安全措施?

python - 从 S3 读取 ZIP 文件而不下载整个文件