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