2012-07-03 12 views
6

in primo luogo non è il sito StackExchange corretto per pubblicare questa domanda se la domanda riguarda altri siti stack, rimuovere la mia domanda.Come zippare la cartella senza percorso completo

Ora lascia parlare la domanda: Questa situazione è che ho un file che si trova in: /home/user/public_html/folder-one/folder-two/folder-three/file.php e il file deve crea un archivio di cartelle /folder-one con tutti i file e sottocartelle di /folder-one. Creo l'archivio con la funzione di sistema (exec(), shell_exec() o system()) e funziona perfettamente. Il mio codice è:

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

Ma quando a scaricare e aprire l'archivio l'archivio comprende le sotto-cartelle come /home; /user; /public_html ma queste cartelle non sono necessarie e voglio sapere come creare zip senza di loro.

Quando provo con qualcosa di simile $output = 'zip -rq my-zip.zip ../../../folder-one -x missthis/\*'; ma poi quando ho aperto l'archivio (su Windows 7 OS based) il nome della cartella di-uno è ../folder-one

Postscript: Sarà meglio se qualcuno mi dà corretta$outputcreare zip su piani di hosting basati su Windows.

Cordiali saluti, George!

risposta

10

Per impostazione predefinita, zip memorizzerà il percorso completo relativo alla directory corrente. Quindi devi cd in public_html prima di eseguire zip:

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

Il suo lavoro perfetto, grazie! –

2

C'è un modo migliore, senza fare un cd. Come indicato here, esiste un'opzione per ignorare i percorsi completi. Questo è -j o --junk-paths. Quindi potresti fare:

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

-j lascerà '/ folder_one' out, e sembra che OP abbia bisogno di avere quella directory e il suo contenuto nell'archivio zip, non solo il contenuto della cartella – sixty4bit

Problemi correlati