2016-04-16 56 views
0

所以我在互聯網上發現了這個類,它可以將文件放入一個zip文件中。 我有一個表格,我可以上傳圖片到一個文件夾中,但是當我嘗試將它們添加到zip中時,我只能添加該文件夾中最後一個文件(循環)。無法在zip中添加所有文件(php)

拉鍊類

<?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(); 
       } 
      } 

     } 
} 

,這是我上傳的文件

> $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"); 

最後的代碼是循環進入上傳的文件的foreach內。

當我做了一個print_r("Added file:" . $file . "<br>");以查看是否添加了所有文件,我得到了積極的迴應。但我總是從文件夾中獲取最後一個文件。 謝謝

編輯 好了,想這個問題是每個循環添加的文件夾中的文件後,將zip類添加文件到壓縮,然後檢查後,如果拉鍊存在或不...因此,在每個循環之後,zip會被覆蓋並只添加最後一個文件。 如何讓這個更好?

回答

0

的問題是有點傻...... 我必須創建在foreach $zipper = new zipper;和$ zipper- store("../upload/" . $uniqUser . ".zip");不必要的重複外類(在底部添加)。