<?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/),一切都开始正常工作了。太棒了!!!