7

首先,如果问题是针对其他堆栈站点的,我不知道哪个是发布此问题的正确 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 的托管计划的制作拉链会更好。

最好的问候,乔治!

4

2 回答 2

13

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

$output = 'cd /home/user/public_html; zip -rq my-zip.zip folder-one -x missthis/\*';
shell_exec($output);
于 2012-07-03T20:08:45.520 回答
5

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

<?php
$output = 'zip -jrq my-zip.zip /home/user/public_html/folder-one -x missthis/\*';
shell_exec($output);
?>
于 2016-02-22T22:03:39.587 回答