2011-08-14 128 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(); 

    ?>