用PHP创建一个Zip文件?

时间:2011-08-14 22:35:10

标签: php

这是我第一次尝试用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

:)

2 个答案:

答案 0 :(得分:4)

检查以下一行:

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

这是你真正想要达到的目标吗?

答案 1 :(得分: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();

    ?>