首先我不知道哪个是正确的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
制作拉链,那会更好。
祝你好运, 乔治!
答案 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);
?>