2012-07-03 21 views
6

öncelikle soru diğer yığın sitesi için soru doğruysa, bu soruyu göndermek için doğru stackExchange sitesi yok lütfen sorumu kaldırın.Tam yol olmadan dosyayı sıkıştırmak için

Şimdi soru hakkında konuşmasına izin: /home/user/public_html/folder-one/folder-two/folder-three/file.php ve dosya tüm dosya ve /folder-one alt klasörlerle klasörün /folder-one arşiv oluşturmak gerekir: Bu durum ben bulunan bir dosya var olduğunu. Sistem işlevi (exec(), shell_exec() veya system()) ile arşivi oluşturuyorum ve mükemmel çalışıyor.

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

Ama indirip arşivi arşiv açtığınızda /home olarak alt klasörler şunlardır;: My kodudur /user; /public_html ama bu klasörleri tamamen gereksizdir ve ben olmadan zip oluşturmak nasıl bilmek istiyorum.

böyle bir şey deneyin $output = 'zip -rq my-zip.zip ../../../folder-one -x missthis/\*'; ama (Windows 7 tabanlı işletim sistemi üzerinde) arşivi açtığınızda sonra klasör birinin adının ../folder-one

Postscript geçerli: Biri bana doğru verirse daha iyi olacak$outputWindows tabanlı barındırma planlarında fermuarlar oluşturun.

Saygılarımızla, George!

cevap

10

Varsayılan olarak, zip, tam yolu geçerli dizine göre depolar. Yani zip çalıştırmadan önce public_html içine cd zorunda:

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

İşi mükemmel, teşekkürler! –

2

bir cd yapmadan, daha iyi bir yol yoktur. Belirtildiği gibi here tam yolları yok saymak için bir seçenek var. Bu, -j veya --junk-paths. Böylece şunları yapabilirsiniz:

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

-j, '/ folder_one' işlevini bırakacak ve OP'nin klasörün içeriğini değil, bu dizini ve içeriğini zip arşivinde tutması gerektiği gibi geliyor – sixty4bit

İlgili konular