4
<?php
       $error = "";
       $file_folder = "temp/";
        // folder to load files
 if (extension_loaded('zip')) {
    // Checking ZIP extension is available
    $zip = new ZipArchive();
    // Load zip library
    $zip_name = "images_".date("d-m-Y") . ".zip";
    // Zip name
    if ($zip -> open($zip_name, ZIPARCHIVE::CREATE) !== TRUE) {
        // Opening zip file to load files
        $error .= "* Sorry ZIP creation failed at this time";
    }
    $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator("../uploads/"));
    $files = iterator_to_array($iterator, true);

    foreach ($iterator as $file) {
        $zip -> addFile($file_folder . $file);
        // Adding files into zip
    }
    print_r($zip);
    //echo $zip_name;
    if (file_exists($file_folder.$zip_name)) {
        // push to download the zip
        header('Content-type: application/zip');
        header('Content-Disposition: attachment; filename="' . $zip_name . '"');
        readfile($zip_name);
        // remove zip file is exists in temp path
        unlink($zip_name);
    } else {
        echo "error";
    }

    $zip -> close();
//} else
//  $error .= "* Please select file to zip ";
 } else
$error .= "* You dont have ZIP extension";

?>

我尝试输出 $zip 对象并得到以下响应: ZipArchive Object ( [status] => 0 [statusSys] => 0 [numFiles] => 12 [filename] => /var/www/bigb/ajax/images_24-12 -2012.zip [评论] => )

状态零说明创建 zip 时没有错误(参考:http ://www.php.net/manual/en/zip.constants.php )

我参考了帖子: 1)从网站的单个目录下载所有图像 2)如何使用 php 创建一个 zip 文件并在用户下载后将其删除? 3) http://www.9lessons.info/2012/06/creating-zip-file-with-php.html

第三个对我帮助最大,而在另一个 2 中,我的状态为 23。

问题:我可以创建一个 zip 并且下载它没有问题,但是当我打开 zip 时,我看不到里面的任何文件,但 zip 的内存在 mbs 中。

请帮帮我...

更新:由于 print_r / echo 和/或试图覆盖同一文件而发生错误 23。

更新 2:问题已解决。这是由于 RecursiveDirectoryIterator 中的路径(即 ../uploads/),一旦我将代码移动到主文件夹并将路径更改为(uploads/),一切都开始正常工作。赞!!!

4

2 回答 2

1

这是由于 RecursiveDirectoryIterator 中的路径(即 ../uploads/),一旦我将代码移动到主文件夹并将路径更改为(uploads/),一切都开始正常工作。赞!!!

于 2012-12-25T11:57:55.880 回答
0

我认为您提供的文件路径$zip->addFile()不正确。您无需将任何内容附加到$file. 以下将起作用:

foreach ($iterator as $file) {
    $zip -> addFile($file);
}

在您的情况下,$file将包含文件的确切相对路径,例如../uploads/file.ext.

于 2012-12-24T20:39:08.710 回答