使用php的ZipArchive函数创建的Zip文件无法查看文件(但有内存)

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对象([status] => 0 [statusSys] => 0 [numFiles] => 12 [filename] => /var/www/bigb/ajax/images_24-12-2012.zip [comment] =>)
状态零说明创建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 第三篇帮了我最大的忙,而在其他两篇文章中,我得到的状态是23。
问题:我能够创建zip文件并且下载也没有问题,但是当我打开zip文件时,我看不到里面的任何文件,但zip文件的内存大小是以MB计算的。
请帮我解决这个问题...
更新:错误23是因为print_r / echo或尝试覆盖同一文件。
更新2:问题已解决。这是由于RecursiveDirectoryIterator中的路径(即../uploads/)导致的,一旦我将代码移到主文件夹并将路径更改为(uploads/),一切都开始正常工作了。太棒了!!!
2个回答

1

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


0

我认为您提供给$zip->addFile()的文件路径是不正确的。您不需要将任何内容附加到$file。以下代码将会生效:

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

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

谢谢您的回复。我已经尝试了所有方法。我的服务器没有写入权限,所以我添加了一个可以写入的文件夹。但是,在打开zip文件时,我没有给出正确的文件夹(可能是个问题),但无论如何都不起作用。 - Hbksagar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接