2016-04-16 5 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, aber wenn ich versuche, sie in die ZIP hinzuzufügen, könnte ich nur die letzte Datei aus diesem Ordner (Schleife) hinzufügen.Kann nicht alle Dateien in der Zip (PHP) hinzufügen

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.

Wenn ich eine print_r("Added file:" . $file . "<br>"); zu sehen, ob alle Dateien hinzugefügt werden, bekomme ich eine positive Antwort. Aber ich bekomme immer die letzte Datei aus dem Ordner. Danke

EDIT Nun, Raten Sie das Problem nach jeder Schleife ist, die Dateien in dem Ordner, die Zip-Klasse fügt die Datei in die Zip, dann nach Kontrollen hinzuzufügen, wenn der Reißverschluss vorhanden ist oder nicht ... Nach jeder Schleife wird die ZIP überschrieben und nur die letzte Datei hinzugefügt. Wie kann ich das besser machen?

Antwort

0

Das Problem war irgendwie dumm ... ich die Klasse außerhalb der foreach $zipper = new zipper; und $ Reißverschluss- store("../upload/" . $uniqUser . ".zip"); für unnötige Wiederholung (hinzugefügt, um es an der Unterseite) zu schaffen hatte.