2016-03-01 76 views
1

我有创建zip存档文件的麻烦。Php ZipArchive创建没有所有文件夹的zip

我有一个文件夹2016_03_01_full,应该归档此路径可用。

C:\OpenServer\domains\project\backup\2016_03_01_full 

Zip文件应该具有相同名称的

C:\OpenServer\domains\stereoshoots\backup\2016_03_01_full.zip 

被创建为文件夹2016_03_01_full.zip这是我的功能

public function createArchive($source, $destination) { 
     $zip = new \ZipArchive(); 

     if(!$zip->open($destination, \ZipArchive::CREATE)) 
      return false; 

     $source = str_replace('\\', '/', realpath($source)); 

     if(is_dir($source) === true) { 
      $files = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($source), \RecursiveIteratorIterator::SELF_FIRST); 

      foreach ($files as $file) { 
       $file = str_replace('\\', '/', $file); 

       if(in_array(substr($file, strrpos($file, '/') + 1), array('.', '..'))) 
        continue; 

       $file = realpath($file); 

       if(is_dir($file) === true) 
        $zip->addEmptyDir(str_replace($source . '/', '', $file . '/')); 
       elseif(is_file($file) === true) 
        $zip->addFromString(str_replace($source . '/', '', $file), file_get_contents($file)); 
      } 
     } 
     elseif(is_file($source) === true) 
      $zip->addFromString(basename($source), file_get_contents($source)); 

     return $zip->close(); 
    } 

$this->createArchive($this->getBackupFolderDir().'/', $this->getBackupFolderDir().'.zip'); 

它创建归档,但它创建的所有文件夹从路径。所以当我打开zip文件时,我看到了OpenServer \ domains \ project \ backup \ 2016_03_01_full文件夹。有没有办法存档没有路径文件夹?

谢谢!

+0

什么呢'的var_dump($这个 - > getBackupFolderDir()) ;'给? – RomanPerekhrest

+0

C:\ OpenServer \ domains \ project \ backup \ 2016_03_01_full – Tigran

回答

0

“目标路径”创建的归档文件包含指定文件的绝对(完整)路径。
要省略完整路径 - 仅指定目的地路径(提取与substrstrrpos功能的文件名):

... 
$destination = substr($destination, strrpos($destination, DIRECTORY_SEPARATOR) + 1); 
if (!$zip->open($destination, \ZipArchive::CREATE)) return false; 
... 
+0

它应该如何知道zip文件的保存位置?它不适合我。 – Tigran