Autor | Zpráva | ||
---|---|---|---|
Fisak Profil |
#1 · Zasláno: 29. 8. 2014, 16:45:27
Dobrý den, rád bych si zazipoval jednu složku ale bez určité složky která je uvnitř. Vyhledal jsem si tento kód na zipování:
class ZipArchiveFolder { protected $jmeno_zipu; protected $root; protected $zip; public function __construct($root = ".", $jmeno_zipu = "zip.zip") { $this->root = $root; $this->jmeno_zipu = $jmeno_zipu; $this->zip = new ZipArchive(); $this->zip->open($this->jmeno_zipu, ZIPARCHIVE::CREATE); $this->nactiAdr(); $this->uloz(); } public function nactiAdr($cesta = "") { $hn = scandir($this->root.$cesta); foreach ($hn as $file) { if ($file == "." || $file == "..") { continue; } if (is_dir($this->root.$cesta."/".$file)) { $this->zip->addEmptyDir($cesta."/".$file); $this->nactiAdr($cesta."/".$file); } else { $this->zip->addFile($this->root.$cesta."/".$file, $cesta."/".$file); } } } public function uloz() { $this->zip->close(); } } neví někdo jak udělat aby se v zipu nezazipovala určitá složka? např "folder/neco/" |
||
nemeja Profil |
#2 · Zasláno: 29. 8. 2014, 20:14:37
Jen rychlý nástřel z hlavy. Vyznačeny úpravy
<? class ZipArchiveFolder { protected $jmeno_zipu; protected $root; protected $zip; protected $vynechat; public function __construct($root = ".", $jmeno_zipu = "zip.zip") { $this->root = $root; $this->jmeno_zipu = $jmeno_zipu; $this->zip = new ZipArchive(); $this->zip->open($this->jmeno_zipu, ZIPARCHIVE::CREATE); $this->nactiAdr(); $this->vynechej( "test" ); $this->uloz(); } public function nactiAdr($cesta = "") { $hn = scandir($this->root.$cesta); foreach ($hn as $file) { if ($file == "." || $file == ".." || in_array($file, $this -> vynechat)) { continue; } if (is_dir($this->root.$cesta."/".$file)) { $this->zip->addEmptyDir($cesta."/".$file); $this->nactiAdr($cesta."/".$file); } else { $this->zip->addFile($this->root.$cesta."/".$file, $cesta."/".$file); } } } public function vynechej( $nazev ){ if( is_array( $nazev )){ $this->vynechat = array_merge( $this->vynechat, $nazev ); } else { $this->vynechat[] = $nazev; } } public function uloz() { $this->zip->close(); } } |
||
Fisak Profil |
<?php class ZipArchiveFolder { protected $jmeno_zipu; protected $root; protected $zip; protected $vynechat; public function __construct($root = ".", $jmeno_zipu = "zip.zip") { $this->root = $root; $this->jmeno_zipu = $jmeno_zipu; $this->zip = new ZipArchive(); $this->zip->open($this->jmeno_zipu, ZIPARCHIVE::CREATE); $this->nactiAdr(); $this->vynechej($this->vynechat); $this->uloz(); } public function nactiAdr($cesta = "") { $hn = scandir($this->root.$cesta); foreach ($hn as $file) { if ($file == "." || $file == ".." || in_array($file, $this -> vynechat)) { continue; } if (is_dir($this->root.$cesta."/".$file)) { $this->zip->addEmptyDir($cesta."/".$file); $this->nactiAdr($cesta."/".$file); } else { $this->zip->addFile($this->root.$cesta."/".$file, $cesta."/".$file); } } } public function vynechej( $nazev ){ if( is_array( $nazev )){ $this->vynechat = array_merge( $this->vynechat, $nazev ); } else { $this->vynechat[] = $nazev; } } public function uloz() { $this->zip->close(); } } new ZipArchiveFolder('./', "uploads/backup/".$zip_name.".zip", "uploads/backup/"); ale nějak to nefunguje :-/ |
||
Alphard Profil |
#4 · Zasláno: 31. 8. 2014, 14:45:04
Ten kód postrádá logiku. Metodu
vynechej (otřesný název mimochodem) voláš s parametrem $this->vynechat, který ta metoda vlastně plní. Konstruktoru dáváš třetí parametr, který vůbec nedefinuje. Nic ve zlém, ale po takové době zde na diskusi bych čekal víc, než copy&paste :-)
A až opravíš tuhle propagaci parametru, ještě narazíš na problém s tím, že [#2] nemeja očekává ve $vynechat jednoduchý název adresáře, nikoliv celou cestu, kterou se tam snažíš vkládat. |
||
Časová prodleva: 10 let
|
0