Autor Zpráva
Fisak
Profil
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
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
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.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: