如何zip文件夹没有完整路径

6 php linux directory zip

首先我不是哪个是正确的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);
?>
Run Code Online (Sandbox Code Playgroud)

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

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

后记:如果有人 在Windows托管计划上给我正确的制作拉链,那会更好$output .

最好的问候,乔治!

小智 11

默认情况下,zip将存储相对于当前目录的完整路径.所以你必须在跑步前cd进入:public_htmlzip

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


pgm*_*ank 5

有一种更好的方法,无需执行cd. 如前所述这里有忽略完整路径的选项。这是-j--junk-paths。所以你可以这样做:

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

  • -j 会将 `/folder_one` 排除在外,听起来 OP 需要在 zip 存档中包含该目录及其内容,而不仅仅是文件夹的内容 (4认同)