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

时间:2012-07-03 19:34:46

标签: php linux zip directory

首先我不知道哪个是正确的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

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

祝你好运, 乔治!

2 个答案:

答案 0 :(得分:10)

默认情况下,zip将存储相对于当前目录的完整路径。因此,在运行cd之前,您必须public_html进入zip

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

答案 1 :(得分:3)

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

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