2010-12-22 73 views
0

目前,當涉及到多個小文件時,FTP在我們的服務器上非常慢。php遞歸壓縮?

我想創建一個文件,我可以在創建zip文件的瀏覽器中運行該文件。

基本上這個文件將坐/ htdocs目錄

zip文件中它創建必須採取/ htdocss(和子文件夾ECT)的所有文件和模仿的結構。

任何人都可以指向正確的方向嗎?

我正在嘗試使用下面的代碼。

唯一的問題是, 我得到一些空白文件夾

說,該文件是:

C:/xampp/htdocs/booking/zip.php

我得到 /C
/C/XAMPP
/C/xampp/htdocs
/C/xampp/htdocs/booking
/C/xampp/htdocs/booking/image.png
/C/xampp/htdocs/booking/index.php

我不想/C/xampp/htdocs/booking

我只想zip文件包含 image.png 的index.php

如何解決這個?

<?php 

function Zip($source, $destination) { 
    if(extension_loaded('zip') === true) { 
    if(file_exists($source) === true) { 
     $zip = new ZipArchive(); 

     if($zip->open($destination, ZIPARCHIVE::CREATE) === true) { 
     $source = realpath($source); 

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

      foreach($files as $file) { 
      $file = realpath($file); 

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

     return $zip->close(); 
    } 
    } 

    return false; 
} 

Zip(dirname(__FILE__), 'testzip.zip'); 
?> 
+0

Windows或* NIX?雖然PHP具有本機ZIP支持,但如果可用,調用操作系統的「zip」命令可能更容易。 – deceze 2010-12-22 02:28:14

回答

2

有兩種選擇。您可以使用內置的ZipArchive PHP並手動迭代目錄內容(readdir或DirectoryIterator)。

或者你也可以做懶傢伙:

header("Content-Type: archive/zip"); // mime 2.0 
header("Content-Disposition: attachment; filename=dir.zip"); 
passthru("zip -q -r - ."); 

取決於所安裝的zip工具。它抱怨,如果你在終端上嘗試,但應該通過passthru管道工作。

+0

這給了我一個空的zip – Hailwood 2010-12-22 02:39:57