2016-04-16 16 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(); 
       } 
      } 

     } 
} 

、これが最後のコードは、アップロードされたファイルの中にループforeachの内部にある

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

私のアップロードファイルです。

すべてのファイルが追加されているかどうかを確認するためにprint_r("Added file:" . $file . "<br>");を実行したところ、肯定的な応答が得られました。しかし、私は常にフォルダから最後のファイルを取得します。 はありがとうない

EDIT さて、問題は、フォルダ内のファイルを追加するには、各ループの後だと思い、ジップクラスはZIPにファイルを追加し、その後、チェック後に郵便番号は存在するか、まったく場合...したがって、各ループの後にzipは上書きされ、最後のファイルだけが追加されます。 どうすればこの問題を改善できますか?

答えて

0

問題は(一番下にこれを追加しました)、私は繰り返し、不要なためforeachの$zipper = new zipper;と$ zipper- store("../upload/" . $uniqUser . ".zip");外のクラスを作成する必要がありました ...ちょっと愚かでした。

関連する問題