关于php:如何在没有完整路径的情况下压缩文件夹

How to zip folder without full path

首先,我不认为这是发布此问题的正确stackExchange网站,如果该问题是针对其他堆栈网站的,请删除我的问题。

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

1
2
3
4
<?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的操作系统上)时,文件夹1的名称为../folder-one

后记:如果有人给我正确的$output基于Windows的托管计划的make zip会更好。

最诚挚的问候,
乔治!


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

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

有一个更好的方法,而不执行cd。如此处所述,有一个选项可以忽略完整路径。这是-j--junk-paths。所以你可以做:

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