Как 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);
?>

но когда я загружаю и открываю архив, архив включает подпапки как /home ; /user ; /public_html но эти папки совершенно не нужны, и я хочу знать, как создать zip без них.

когда я пытаюсь с чем-то вроде этого $output = 'zip -rq my-zip.zip ../../../folder-one -x missthis/*'; но тогда, когда я открываю архив (на базе ОС Windows 7), имя папки-один ../folder-one

Postscript: будет лучше, если кто-то даст мне правильный $output сделать молнии на основе планов хостинга windows.

С наилучшими пожеланиями, Джордж!

2 ответов


по умолчанию, zip будет хранить полный путь относительно текущего каталога. Так что вы должны cd на public_html перед zip:

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

есть лучший способ, не делая cd . Как сказано здесь есть возможность игнорировать полные пути. Это -j или --junk-paths. Так что вы могли бы сделать:

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