zip 主文件夹,其中包含子文件夹

2024-02-01

我有一个文件夹,里面有一些文件和子文件夹。我将如何读取目录并压缩主文件夹?

Ex:

maindirectory
--- file 1
--- file 2
--- subdirectory 1
------ file 3
------ file 4
--- subdirectory 2
------ file 5
------ file 6

我正在使用这个脚本:

function Zip($source, $destination, $include_dir = false)
{

    if (!extension_loaded('zip') || !file_exists($source)) {
        return false;
    }

    if (file_exists($destination)) {
        unlink ($destination);
    }

    $zip = new ZipArchive();
    if (!$zip->open($destination, ZIPARCHIVE::CREATE)) {
        return false;
    }
    $source = str_replace('\\', '/', realpath($source));

    if (is_dir($source) === true)
    {

        $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source), RecursiveIteratorIterator::SELF_CHILD);

        if ($include_dir) {

            $arr = explode("/",$source);
            $maindir = $arr[count($arr)- 1];

            $source = "";
            for ($i=0; $i < count($arr) - 1; $i++) { 
                $source .= '/' . $arr[$i];
            }

            $source = substr($source, 1);

            $zip->addEmptyDir($maindir);

        }

        foreach ($files as $file)
        {
            $file = str_replace('\\', '/', $file);

            // Ignore "." and ".." folders
            if( in_array(substr($file, strrpos($file, '/')+1), array('.', '..')) )
                continue;

            $file = realpath($file);

            if (is_dir($file) === true)
            {
                $zip->addEmptyDir(str_replace($source . '/', '', $file . '/'));
            }
            else if (is_file($file) === true)
            {
                $zip->addFromString(str_replace($source . '/', '', $file), file_get_contents($file));
            }
        }
    }
    else if (is_file($source) === true)
    {
        $zip->addFromString(basename($source), file_get_contents($source));
    }

    return $zip->close();
}

我这样调用该函数:

Zip('image/data/','aaa.zip',false);

但我得到的是它压缩了整个C:文件夹。我想要的只是将文档压缩到image/data/ folder.

如何格式化正确的目录及其子目录?


尝试这个。

zipFile('image/data/','aaa.zip', true);

/**
 * function zipFile.  Creates a zip file from source to destination
 *
 * @param  string $source Source path for zip
 * @param  string $destination Destination path for zip
 * @param  string|boolean $flag OPTIONAL If true includes the folder also
 * @return boolean
 */
function zipFile($source, $destination, $flag = '')
{
    if (!extension_loaded('zip') || !file_exists($source)) {
        return false;
    }

    $zip = new ZipArchive();
    if (!$zip->open($destination, ZIPARCHIVE::CREATE)) {
        return false;
    }

    $source = str_replace('\\', '/', realpath($source));
    if($flag)
    {
        $flag = basename($source) . '/';
        //$zip->addEmptyDir(basename($source) . '/');
    }

    if (is_dir($source) === true)
    {
        $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source), RecursiveIteratorIterator::SELF_FIRST);
        foreach ($files as $file)
        {
            $file = str_replace('\\', '/', realpath($file));

            if (is_dir($file) === true)
            {
                $zip->addEmptyDir(str_replace($source . '/', '', $flag.$file . '/'));
            }
            else if (is_file($file) === true)
            {
                $zip->addFromString(str_replace($source . '/', '', $flag.$file), file_get_contents($file));
            }
        }
    }
    else if (is_file($source) === true)
    {
        $zip->addFromString($flag.basename($source), file_get_contents($source));
    }

    return $zip->close();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

zip 主文件夹,其中包含子文件夹 的相关文章

  • 展平数组:保持索引、值等于数组中的位置

    我在尝试以特定方式展平数组时遇到了一些麻烦 这里有一个print r我想要展平的数组的视图 Array 1 gt Array 8 gt 1 9 gt 2 10 gt Array 15 gt Array 22 gt 1
  • 将 rel="nofollow" 添加到 WordPress 帖子中的所有链接

    我想将 rel nofollow 添加到我的 WordPress 帖子中的所有链接 并且我希望能够拥有一个不会获得 nofollow 的链接列表 我已经尝试了很多 但我无法正确完成 因为我真的不能很好地理解正则表达式 所以我有字符串 tex
  • 将 #RRGGBB 十六进制值转换为 #AARRGGBB

    414141 与 AARRGGBB 的值是什么 52b531 又如何 我如何使用 PHP 转换它 Regards 奔腾10 AA 是 Alpha 通道 直接转换是将 AA 设置为 FF 以使其完全不透明 414141 becomes FF4
  • AWS S3从本地主机批量上传php错误

    我在尝试着批次 散装从本地主机 xampp 上传到我的S3 bucket 它似乎适用于大约 6 个项目 然后我收到一条错误消息 cURL 错误说Failed sending network data from http curl haxx
  • PHP 下载脚本输出损坏的文件

    我正在用 PHP 为我的 CMS 构建一个文件下载类 当时我注意到它以不同的编码格式输出文件 我尝试使用 readfile file get contents fread 但似乎都在做同样的事情 这就像与输出缓冲有关的东西 我使用脚本下载的
  • PHP-MySQLi 连接随机失败并显示“无法分配请求的地址”

    大约两周以来 我一直在处理 LAMP 堆栈中最奇怪的问题之一 长话短说 与 MySQL 服务器的随机连接失败并显示错误消息 Warning mysqli real connect HY000 2002 Cannot assign reque
  • Facebook“赞”按钮回调帮助

    我正在使用此代码进行类似 facebook 的回调 问题是 如果我调用 php 脚本 例如 有人可以看到我的 javascript 并运行此页面 甚至可以向其发送垃圾邮件或在没有先点赞的情况下使用它 我的想法是 我想为每个喜欢该页面的用户提
  • PHP 读取使用 setcookie() 创建的 cookie

    来自manual https www php net setcookie 直到下一次加载 Cookie 应该可见的页面之前 Cookie 才会变得可见 这意味着创建的 cookiesetcookie将无法访问 COOKIE直到下一页加载 有
  • PHP 删除字符最后一个实例之前的所有内容

    有没有办法删除某个字符之前的所有内容 包括最后一个实例 我有多个字符串 其中包含 gt e g the gt cat gt sat gt on gt the gt mat welcome gt home 我需要对字符串进行格式化 以便它们变
  • zend 表单验证

    我想知道 Zend Form 如何验证输入 我的意思是它如何知道要验证哪些输入字段 我查看了 php 全局变量 POST GET 但没有看到任何设置为标识符 例如 的内容 以便了解如何验证 有人能给我推荐一些关于这些东西的指南吗 好吧 找出
  • 查明具有特定 ID 的会话是否已过期

    我正在创建一个上传功能 将用户上传的文件存储在服务器上 并以用户的会话 ID 作为名称 现在 我只想将此文件保留在服务器上 直到该会话处于活动状态 所以 我的问题是 如何根据会话 ID 确定会话是活动的还是过期的 以便在后一种情况下我可以安
  • PHP Github Pull 脚本错误“权限被拒绝(公钥)”

    我已经设置了一个 PHP 脚本来执行 GitHub 拉取 这包含在我的 Github 文件夹中 home mysite public html github github pull php 我的服务器已经有 SSH 公钥 就像我执行git
  • 计算 PHP 字符串中特定字符的所有出现次数的最有效方法是什么?

    计算 PHP 字符串中特定字符的所有出现次数的最有效方法是什么 用这个 echo substr count abca a will echo 2
  • 写入 xml 文件时允许的内存大小已耗尽(尝试分配 4459414 字节)[重复] 67108864 字节

    这个问题在这里已经有答案了 可能的重复 php 中允许的内存大小已耗尽 尝试分配 43148176 字节 33554432 字节 https stackoverflow com questions 415801 allowed memory
  • 错误 #520009 - 帐户受到限制

    我收到 520009 错误 帐户 电子邮件受保护 cdn cgi l email protection被限制 当尝试进行并行付款时 我的代码使用沙箱运行良好 但我切换到实时端点 它开始失败 有问题的帐户是有效的 PayPal 帐户 我使用的
  • 自定义 WordPress 画廊 html 布局

    当使用默认媒体上传器在 WordPress 中创建图像库时 WordPress 将图像包装在一堆 HTML 标记中 如何在生成之前覆盖它 以便我可以输出所需的标记并更改创建图库布局的方式 目前 WordPress 生成的代码如下 div d
  • Laravel,控制器中的 Auth::user()

    Laravel 框架 为什么我无法在 laravel 项目的控制器中使用 Auth user 查看用户是否已登录 Session 是否未连接到控制器 HomeController php public function isauthoriz
  • 将客户分配到 magento 的多个客户组

    您好 我想将多个组分配给特定客户 例如 Rajat 客户 属于 批发 零售商 电力 实际上我在上面看到了同样的话题每个客户有多个客户组 https stackoverflow com questions 6153011 multiple c
  • sqlite3和pdo_sqlite有什么区别

    我正在将我的 Web 应用程序从 MySQL 迁移到 SQLite 数据库 我发现有两个 PHP 扩展用于与 sqlite 通信 php sqlite3 dll and php pdo sqlite dll 什么扩展比较好 或者另一个问题
  • PHP date() 和 strtotime() 返回错误的月份 31 日

    我在用着date and strtotime 函数在下拉列表中显示接下来的 3 个月 PHP代码 echo date m Y strtotime 0 months echo date m Y strtotime 1 months echo

随机推荐

  • 低延迟、大规模消息队列

    我正在重新思考 Facebook 应用程序和云计算时代的大型多人游戏 假设我要在现有开放协议之上构建一些东西 并且我想为 1 000 000 个同时玩家提供服务 只是为了解决问题 假设每个玩家都有一个传入消息队列 用于聊天等 平均还有一个传
  • 查找带有 USB 设备 VID/PID 的 /dev 条目

    我想制作一个程序来检测哪些 dev sd 条目链接到已知的 USB VID PID 对 你知道我如何获得 USB 记忆棒的 VID PID 吗 dev sd 您可以使用udevadm为了这 在输出中udevadm info q proper
  • 通过 UIBezierPath 移动 CALayer

    我有一个图层将从 UIBezierPath 上的 A 点移动到 B 点 我发现了很多涉及 CAAnimation 和 UIBezierPath 的示例 但我只需将图层从指定点移动到贝塞尔曲线路径上的另一个点 任何建议 将不胜感激 Thank
  • 裁剪图像时添加细白线 (Objective-C OSX)

    我正在剪切一张大图像并将其保存为许多不同的图像 我首先在iOS它工作正常 但是当我尝试将代码移植到OSX 一条细白线 1 像素 出现在图像的顶部和右侧 该线不是纯白色或实线 参见下面的示例 这里是iOS制作一个子图像的代码 就像冠军一样 v
  • 如何从 HIVE 中的日期减去月份

    我正在寻找一种方法来帮助我从 HIVE 中的日期中减去月份 我有个约会2015 02 01 现在我需要从这个日期减去 2 个月 这样结果应该是2014 12 01 你们能帮我一下吗 select add months 2015 02 01
  • BigQuery 选择 * 两列除外

    我想从公共 BigQuery github repos 数据集中选择除以下两条记录之外的所有内容 author nameAND差异 old mode 根据我问的类似问题 我想我想运行类似于 standardSQL SELECT REPLAC
  • 如何仅在functions.auth.user().onCreate完成后完成登录

    我正在使用 firebase 函数 并且有一个在用户创建时添加新集合的函数 问题是有时用户在功能完成之前登录 因此用户已登录但尚未创建新集合 然后我收到错误消息 缺少或权限不足 因为规则找不到该集合 我该如何处理 仅当所有内容都来自时 是否
  • 在表格单元格内垂直拉伸 div - IE8

    如何在表格单元格内垂直拉伸 DIV 我想height 100 就可以了但在某些情况下 事实并非如此 至少在 IE8 中 这是一个简单的例子 一个 3 行表格 包含页眉 内容和页脚 我希望 内容 单元格内的 内容 DIV 垂直拉伸 100 在
  • 如何组合 kotlin 委托属性:可观察、可否决和“按映射”?

    我正在尝试结合代表 可观察的 https kotlinlang org api latest jvm stdlib kotlin properties delegates observable html with vetoable http
  • .NET Framework 4.0 安装程序是否也安装了 .NET 3.5?

    NET 4 0 旨在与 3 5 并行运行 并且不会运行 3 5 应用程序 这让我担心必须指示我的用户下载 NET 3 5 而不仅仅是 最新版本 我在一篇博客中读到 如果尚未安装 4 0 安装程序也会安装 3 5 但我现在无法测试它 有人尝试
  • 如何使用 XPath 和 Java 更新 XML

    我有一个 XML 文档以及该文档的 XPath 表达式 我必须在运行时使用 XPath 更新文档 我如何使用 Java 来做到这一点 下面是我的xml
  • pytorch 中图像分割的通道明智 CrossEntropyLoss

    我正在做图像分割任务 总共有 7 个类 所以最终的输出是像 batch 7 height width 这样的张量 它是一个 softmax 输出 现在直觉上我想使用 CrossEntropy 损失 但 pytorch 实现不适用于通道明智的
  • 当 PostgreSQL 停止时,TFDConnection.OnRecover 永远不会被触发

    我使用了 Firedac 连接恢复功能 如下所述恢复连接 FireDAC http docwiki embarcadero com RADStudio Rio en Recovering Connection FireDAC Delphi
  • 撤消 IntelliJ 智能结帐

    IntelliJ 有一个理论上非常酷的功能 称为智能结账 https blog jetbrains com idea 2012 03 simpler and more powerful ui for git branches 当您更改分支并
  • 如何在 Ruby 中的 Array 类中对数组的每个元素进行平方?

    我的部分代码如下 class Array def square self map num num 2 self end end 当我打电话时 1 2 3 square 我期望得到 1 4 9 但结果却得到 1 2 3 为什么会这样呢 当我打
  • 获取URL的所有文件夹

    您好 我正在尝试从给定服务器读取所有文件 我想做的事 读取所有文件夹 获取文件夹内的文件 URL 我尝试通过此方法获取服务器的文件夹和文件 但它返回了一个包含 MacBook 文件夹的数组 NSURL directory NSURL URL
  • WebApi 自定义授权属性不起作用

    我需要使用活动目录中的一个或多个特定用户来保护我的 Web api 在 web config 中我有以下代码
  • 如何检查表达式是否包含复杂表达式?

    有没有办法检查表达式是否包含复杂表达式 虚数 文档说你无法检查表达式是否包含I因为它是如何解释的 我也尝试过ImaginaryQ expr expr Conjugate expr and Simplify expr Simplify Con
  • SCons 问题 - 不理解 Variables 类

    我正在为一个项目开发 SConstruct 构建文件 并且尝试从选项更新为变量 因为选项已被弃用 我不明白如何使用变量 我有 0 python 经验 这可能是造成这一点的原因 例如 我有这个 opts Variables opts Add
  • zip 主文件夹,其中包含子文件夹

    我有一个文件夹 里面有一些文件和子文件夹 我将如何读取目录并压缩主文件夹 Ex maindirectory file 1 file 2 subdirectory 1 file 3 file 4 subdirectory 2 file 5 f