【问题标题】:How to zip folder without full path如何在没有完整路径的情况下压缩文件夹
【发布时间】:2012-07-04 07:10:41
【问题描述】:

首先,如果问题是针对其他堆栈站点,我不知道哪个是发布此问题的正确 stackExchange 站点,请删除我的问题。

现在谈谈这个问题: 这种情况是我有一个文件位于:/home/user/public_html/folder-one/folder-two/folder-three/file.php 并且该文件必须创建文件夹 /folder-one 的所有文件和子文件夹的存档的/folder-one。我使用系统函数(exec()、shell_exec() 或 system())创建存档,它运行良好。我的代码是:

<?php
$output = 'zip -rq my-zip.zip /home/user/public_html/folder-one -x missthis/\*';
shell_exec($output);
?>

但是当我下载并打开存档时,存档包含子文件夹 /home/user ; /public_html 但这个文件夹完全不需要,我想知道如何在没有它们的情况下创建 zip。

当我尝试使用类似 $output = 'zip -rq my-zip.zip ../../../folder-one -x missthis/\*'; 的东西时,但当我打开存档(在基于 Windows 7 的操作系统上)时,文件夹的名称是 ../folder-one

后记:如果有人给我正确的就更好了 $output 基于 Windows 的托管计划的制作拉链。

最好的问候, 乔治!

【问题讨论】:

    标签: php linux zip directory


    【解决方案1】:

    有一个更好的方法,不用 cd 。如here 所述,可以选择忽略完整路径。这是-j--junk-paths。所以你可以这样做:

    <?php
    $output = 'zip -jrq my-zip.zip /home/user/public_html/folder-one -x missthis/\*';
    shell_exec($output);
    ?>
    

    【讨论】:

    • -j 将离开/folder_one,听起来OP需要在zip存档中包含该目录及其内容,而不仅仅是文件夹的内容
    【解决方案2】:

    默认情况下,zip 将存储相对于当前目录的完整路径。所以你必须在运行zip之前将cd转换成public_html

    $output = 'cd /home/user/public_html; zip -rq my-zip.zip folder-one -x missthis/\*';
    shell_exec($output);
    

    【讨论】:

      猜你喜欢
      • 2011-12-12
      • 2021-09-08
      • 2017-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-26
      • 1970-01-01
      相关资源
      最近更新 更多