2015-06-26 3 views
0

Привет, я просто хотел узнать, можно ли использовать библиотеку zign для кодировки, чтобы создать zip на локальном диске, а затем добавить к нему файлы?Codeigniter Zip Library

Ниже приведен код

$this->load->library('zip'); 
if (($handle = fopen($media_file, "r")) !== FALSE) 
     { 
      $row = 1; 

      while (($data = fgetcsv($handle)) !== FALSE) 
      { 
       if($row > 1) 
       { 
        $image_name = isset($data[1]) ? $data[1] : null; 

        if(!empty($image_name)) 
        { 
         $this->zip->read_file("C:/files/Images/$image_name"); 
        } 
       } 

       $row++; 
      } 
     } 
     $this->zip->download('Media.zip'); 

Вместо загрузки молнию я хотел бы создал молнию на локальном диске, а просто добавить в него файлы.

Я бы очень признателен, если кто-то может мне помочь. Я пытался использовать php zip, но по какой-то странной причине он игнорирует некоторые файлы.

ответ

0

пример - моя молния

/** 
* Created by websky 
*/ 
class myZipper extends ZipArchive{ 
    protected $dir; 
    protected $archive; 
    protected $pathsArray; 

    /** 
    * @param string $dir 
    * @param string $name 
    */ 
    public function __construct($dir,$name){ 
     $this->dir = $dir; 
     $this->archive = $name; 
     $this->open($this->archive, myZipper::CREATE); 
     $this->myScanDir($this->dir); 
     $this->addZip(); 
     $this->getZip(); 
    } 

    /** 
    * @param string $dir 
    */ 
    protected function myScanDir($dir){ 
     $files = scandir($dir); 
     unset($files[0], $files[1]); 
     foreach ($files as $file) { 
      if(is_dir($dir.'/'.$file)){ 
       $this->myScanDir($dir.'/'.$file); 
      } 
     else { 
       $this->pathsArray[] = array('oldpath' => $dir.'/'.$file, 'newpath'=> (($this->dir == $dir)? $file : str_replace($this->dir.'/', '', $dir).'/'.$file)); 
      } 
     } 
    } 

    protected function addZip(){ 
     foreach($this->pathsArray as $path){ 
      $this->addFile($path['oldpath'],$path['newpath']); 
     } 
    } 

    public function getZip(){ 
     $this->close(); 
     header('Content-Type: application/zip'); 
     header('Content-disposition: attachment; filename='.$this->archive); 
     header('Content-Length: '.filesize($this->archive)); 
     readfile($this->archive); 
     unlink($this->archive); 
    } 
    } 

    $test = new myZipper('C:/files/Images', 'Images.zip'); 

myZipper (исходные файлы, имя архива);

Смежные вопросы