无法在zip中添加所有文件(php)

时间:2016-04-16 12:57:16

标签: php zip archive

所以我在互联网上发现这个类可以将文件放入zip中。 我有一个表单,我可以将图片上传到文件夹,但当我尝试将它们添加到zip中时,我只能添加该文件夹中的最后一个文件(循环)。

  

拉链类

<?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>");查看是否添加了所有文件时,我得到了肯定的回复。但我总是从文件夹中获取最后一个文件。 谢谢

  

EDIT   好吧,猜猜问题是在每个循环之后添加文件夹中的文件,zip类将文件添加到zip中,然后检查zip是否存在或者没有...所以在每个循环后,zip被覆盖并仅添加最后一个文件。   我怎样才能做得更好?

1 个答案:

答案 0 :(得分:0)

问题有点愚蠢...... 我必须在foreach $zipper = new zipper;和$ zipper - store("../upload/" . $uniqUser . ".zip");之外创建一个类,以便进行不必要的重复(在底部添加它)。