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

时间:2012-12-24 18:32:51

标签: php zip

<?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] =&gt; 0 [statusSys] =&gt; 0 [numFiles] =&gt; 12 [filename] =&gt; /var/www/bigb/ajax/images_24-12-2012.zip [comment] = &gt;)

Status Zero解释了创建zip时没有错误(参考:http://www.php.net/manual/en/zip.constants.php

我推荐了帖子: 1)Download all images from a single directory of a website 2)How to create a zip file using php and delete it after user downloads it? 3)http://www.9lessons.info/2012/06/creating-zip-file-with-php.html

第三个帮助了我最多,另外2个我获得了23的状态。

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

请帮帮我......

更新:因为print_r / echo和/或尝试覆盖同一文件而发生错误23。

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

我认为您向$zip->addFile()提供的文件路径不正确。您无需向$file追加任何内容。以下工作:

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

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