2016-04-15 15 views
0

So fand ich diese Klasse im Internet, die Dateien in eine ZIP-Datei setzen kann. Ich habe ein Formular, wo ich Bilder in einen Ordner hochladen kann, dann habe ich versucht, in diese Dateien zu loopen und sie in eine Zip-Datei zu speichern, aber scheint, dass ich irgendwo fehlgeschlagen bin.Kann keine Zip-Datei erstellen (php)

Reißverschluss Klasse

<?php 

class zipper { 
    private $_files = array(), 
      $_zip; 

    public function __construct() { 
     $this->_zip = new ZipArchive; 
    } 


    public function add($input){ 
     if(is_array($input)){ 
      $this->_files = array_merge($this->_files, $input); 
     }else{ 
      $this->_files[] = $input; 
     } 

    } 
     public function store($location = null){ 

      if(count($this->_files) && $location){ 
       foreach ($this->_files as $index => $file) { 
        if(!file_exists($file)){ 
         unset($this->_files[$index]); 
        } 
        print_r($file . "<br>");// here gives me the exact path of the files. 
       } 

       if($this->_zip->open($location, file_exists($location) ? ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE)){ 
        foreach ($this->_files as $file) { 
         $this->_zip->addFile($file, $file); 
        } 

        $this->_zip->close(); 
       } 
      } 

     } 
} 

und das ist mein Upload-Datei

> $uniqUser = uniqid(strtoupper($userName). "-" , true); 
> $directory ='../upload/'; 
> $file_name is $files['name'] 

if(!is_dir("../upload/". $uniqUser ."/")) { 
        mkdir("../upload/". $uniqUser ."/"); 
       } 


       if(move_uploaded_file($file_tmp, $directory . $uniqUser . "/" . $file_name)){ 
        $uploaded[$position] = $directory . $uniqUser . "/" . $file_name; 
         $zipper = new zipper; 
         $zipper->add(BASE_URL . "/upload/" . $uniqUser . "/" . $file_name); 
         $zipper->store(BASE_URL . "/upload/" . $uniqUser . ".zip"); 

der letzte Code ist in einem foreach, die hochgeladen in die Dateien Schleifen.

Ich weiß nicht, warum ich am Ende bei der Erstellung des Archivs nicht ...

Könnte eine einfache Möglichkeit, diese neu erstellte Ordner in ein zip zu drehen oder sie in eine zip hinzufügen?

+1

Mögliche Duplikate von [Wie man einen ganzen Ordner mit PHP zip] (http://stackoverflow.com/questions/4914750/how-to-zip-a-whole-folder-using-php) – paskl

+0

Ich kann falsch liegen und bin nicht in der Lage, atm zu testen, aber wenn ich nicht irre, müssen Sie durch einige hoops für file_exists() springen, um mit voller URL zu arbeiten. Übergeben Sie einfach den relativen Speicherort der Datei ohne BASE_URL. Werfen Sie auch einige Debug-Zeilen und erzählen Sie uns mehr e.i. 'if (! file_exists ($ file)) { \t \t nicht gesetzt ($ this -> _ files [$ index]); \t \t print_r ("unset". $ Datei); \t} \t \t und \t \t foreach ($ this -> _ Dateien als $ file) { \t \t $ this -> _ zip-> addFile ($ file, $ file); \t \t print_r ("Datei hinzugefügt:". $ Datei); \t} ' –

+0

@TomasB Ich bekomme nichts von' print_r ("unset". $ Datei) 'bedeutet, dass keine Dateien gelöscht wurden, und aus der' print_r ("Datei hinzugefügt:". $ Datei); 'Ich bekomme die 3 Dateien wurden hinzugefügt. Ich habe die BASE_URL geändert und es hat funktioniert, aber das Problem ist, nach dem Öffnen des Archivs finde ich nur die zuletzt hochgeladene Datei selbst $ Datei sagt, dass alle hinzugefügt hat, aber tatsächlich nur die letzte Datei hinzugefügt. – Bououm

Antwort

0

Das erste Problem war, weil ich BASE_URL ich ../upload/ schreiben musste. Zweites Problem war irgendwie dumm ... Ich musste die Klasse außerhalb der Foreach $zipper = new zipper; und $ Zipper-store("../upload/" . $uniqUser . ".zip"); für unnötige Wiederholung erstellen (unten hinzugefügt).

Verwandte Themen