我想帮助调试这段代码。我试图压缩一些文件,我将其作为Ziparchive的路径提供。我认为zip文件可能是空的。当我在一个临时站点上测试时,我得到了一个“减压”失败的'错误。当我在本地测试时,我在php日志中得到以下错误
PHP警告:readfile(images.zip):无法打开流:第29行/Applications/MAMP/htdocs/8018_Whites/wordpress/downloadzip.php中没有此类文件或目录。
以下是代码:
<?php
//get image urls string
//$cat_string = "url1,url2,url3..."
if (isset($_GET['category-images'])) {
$cat_string=$_GET['category-images'];
}
//change string to array
$cat_array=explode(",", $cat_string);
$files=$cat_array;
$zipname = 'images.zip';
$zip = new ZipArchive;
$zip->open($zipname, ZipArchive::CREATE);
foreach ($files as $file) {
if(!strstr($file,'.php')) $zip->addFile($file);
}
$zip->close();
if ($zipname) {
header('Content-Type: application/zip');
header('Content-disposition: attachment; filename='.$zipname);
header('Content-Length: ' . filesize($zipname));
readfile($zipname);
exit();
}
?>
我是否需要在此代码中添加ob_start / ob_flush,是否应该在readfile之后放置ob_flush?
答案 0 :(得分:0)
所有文件和Zip文件夹均提供绝对路径。这样便可以正确创建zip。
<?php
$zip_root ='/var/www/gplhome/'
$file_root ='/var/www/gplhome/project/'
//get image urls string
//$cat_string = "url1,url2,url3..."
if (isset($_GET['category-images'])) {
$cat_string=$_GET['category-images'];
}
//change string to array
$cat_array=explode(",", $cat_string);
$files=$cat_array;
$zipname = $zip_root.'images.zip';
$zip = new ZipArchive;
if ($zip->open($zipname, ZIPARCHIVE::CREATE) != TRUE) {
die("Could not open archive");
}
foreach ($files as $file) {
if(!strstr($file_root.$file,'.php')) $zip->addFile($file_root.$file);
}
$zip->close();
if ($zipname) {
header('Content-Type: application/zip');
header('Content-disposition: attachment; filename='.$zipname);
header('Content-Length: ' . filesize($zipname));
readfile($zipname);
exit();
}
?>
答案 1 :(得分:0)
if ($zipname) {
与
if (is_readable($zipname)) {
?>
和php文件的末尾