2012-07-03 21 views
6

Po pierwsze nie mam, która jest poprawna witryna stackExchange, aby opublikować to pytanie, jeśli pytanie dotyczy innej strony stosu, proszę usunąć moje pytanie.Jak zip folder bez pełnej ścieżki

Teraz mówić o pytaniu: Ta sytuacja Mam plik, który znajduje się w: /home/user/public_html/folder-one/folder-two/folder-three/file.php i plik musi utworzyć archiwum folderu /folder-one ze wszystkich plików i podfolderów z /folder-one. Tworzę archiwum z funkcją systemową (exec(), shell_exec() lub system()) i działa idealnie. Mój kod to:

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

Ale kiedy pobrać i otworzyć archiwum archiwum zawierać podfoldery jak /home; /user; /public_html ale te foldery są całkowicie niepotrzebne i chcę wiedzieć, jak utworzyć zip bez nich.

Kiedy próbuję coś takiego $output = 'zip -rq my-zip.zip ../../../folder-one -x missthis/\*'; ale kiedy otworzyć archiwum (na Windows 7 OS oparty) nazwę folderu-on ../folder-one

Postscriptum: Będzie lepiej, jeśli ktoś daje mi prawidłowe$outputzamki błyskawiczne w programach hostingowych opartych na systemie Windows.

Pozdrawiam, George!

Odpowiedz

10

Domyślnie zip zapisze pełną ścieżkę względem bieżącego katalogu. Więc trzeba cd do public_html przed uruchomieniem zip:

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

Jego dzieło jest doskonałe, dziękuję! –

2

Istnieje lepszy sposób, nie robiąc cd. Jak podano here, istnieje opcja ignorowania pełnych ścieżek. To jest -j lub --junk-paths. Więc możesz zrobić:

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

-j pozostawi '/ folder_one' na zewnątrz i wygląda na to, że OP musi mieć ten katalog i jego zawartość w archiwum zip, a nie tylko zawartość folderu – sixty4bit