2011-08-14 161 views
4

這是我第一次嘗試在PHP中創建一個ZIP文件。使用PHP創建Zip文件?

我正在做的是,我的PHP將搜索某個目錄中的文件,將它們全部抓住並保存到一個ZIP文件中。該zip文件然後將文件發送到瀏覽器進行下載。我非常接近,但我被困在某個部分。

這裏是我的代碼:

$zip = new ZipArchive(); 
    if ($zip->open('test.zip', ZIPARCHIVE::CREATE) !== TRUE) { 
    die ("Could not open archive"); } 

    $myDirectory = opendir("../folder/plugins/".$id.""); 

    while($entryName = readdir($myDirectory)) { $dirArray[] = $entryName; } 
    closedir($myDirectory); 
    $indexCount = count($dirArray); 
    sort($dirArray); 
    for($index=0; $index < $indexCount; $index++) { 
    if (substr("$dirArray[$index]", 0, 1) != "."){ 

    $file = "".$myDirectory."".$dirArray[$index].".zip"; 

    $zip->addFile($file, $file) or die ("cant add file"); ; 
    echo $dirArray[$index]; echo '</br>'; 

    }} 

    $zip->close()or die("cant close"); 

試圖關閉時,我收到「無法關閉」的錯誤。請幫助我,我無法找到我在代碼中做錯了什麼。這是它是打印:

filename1.png 
    filename2.png 
    can't close 

:)

+0

你看用'getStatusString'返回的錯誤字符串? –

+0

通常,一些代碼改進:'$ zip-> addFile($ file,$ file)或die(「cant add file」); ;'(double分號),'$ file =「」。$ myDirectory。「」。$ dirArray [$ index]。「。zip」;'可以寫得更好'$ file =「$ {myDirectory} $ {dirArray [$ index]}。zip',並且通常爲了可讀性,在'echo $ dirArray [$ index]; echo'
';'中合併一行代碼並不是一個好主意。 –

回答

4

檢查以下行:

$zip->addFile($file, $file) 

這是你真正想要達到什麼樣的?

0

這是我如何得到它的工作:

<?php 

     $dirArray = array(); 

     /* creates a compressed zip file */ 
     $zip = new ZipArchive; 
     if ($zip->open('dataminefiles.zip', ZIPARCHIVE::CREATE) !== TRUE) { 
      die ("Could not open archive"); 
     } 
     // open the current dir 
     if ($handle = opendir('.')) { 
     while (false !== ($entry = readdir($handle))) { 
      // ignore hidden files   
      if ($entry != "." && $entry != "..") { 
      // only zip specific files 
       if (substr($entry,-3,3) == "jpg" || substr($entry,-3,3) == "pdf" || substr($entry,-3,3) == "lsx" || substr($entry,-3,3) == "xls" || substr($entry,-3,3) == "doc" || substr($entry,-3,3) == "txt" || substr($entry,-3,3) == "png" || substr($entry,-3,3) == "gif" || substr($entry,-3,3) == "peg") { 
        // if allowed, add them to the array 
        $dirArray[] = $entry; 
       } 
      } 
     } 
     closedir($handle); 
    } 

     $indexCount = count($dirArray); 
     sort($dirArray); 
      // loop through the files and add them to the zip file 
     for($index=0; $index < $indexCount; $index++) { 
       $file = "{$dirArray[$index]}"; 
       $zip->addFile($file, $file); 
     } 
    // close the zip file 
     $zip->close(); 

    ?>