尝试创建zip文件以下载多张图片

时间:2015-07-27 13:47:56

标签: php

我过去一小时都玩过以下脚本,无法弄清楚到底出了什么问题。

这是什么想法: - 基本上我有一个数据库,用于保存图像上的数据,我正在调用该数据(图像文件名),尝试将其放入数组中,然后传递给zip创建脚本。

以下是我所拥有的: -

$query_ImageCollect = "SELECT * FROM image_data WHERE image_dealerid='$dealer_id' AND imagename LIKE '$imageName'";
$ImageCollect = mysql_query($query_ImageCollect, $vwconn) or die(mysql_error());
$row_ImageCollect = mysql_fetch_assoc($ImageCollect);
$totalRows_ImageCollect = mysql_num_rows($ImageCollect);
$counter=0;
do{
    $counter=$counter+1;
    $ImageUrl=$row_ImageCollect['image_url'];
    $getFileNames="../../images/$ImageUrl";
    if($counter==1){
    $getFiles="'$getFileNames'";
    }else{
    $getFiles="$getFiles, '$getFileNames'";
    }
    } while ($row_ImageCollect = mysql_fetch_assoc($ImageCollect));
    $groupFiles=array("$getFiles");
    $zipName="Pictures.zip";
    $zip = new ZipArchive;
    $zip->open($zipName, ZipArchive::CREATE);
        foreach ($groupFilesas $file) {
            $zip->addFile($file);
        }

    $zip->close();
    header('Content-Type: application/zip');
    header('Content-disposition: attachment; filename='.$zipName);
    header('Content-Length: ' . filesize($zipName));
    readfile($zipName);

我也尝试将结果直接解析为数组但它也失败了: -

$query_ImageCollect = ("SELECT image_url FROM image_data WHERE image_dealerid='$dealer_id' AND imagename LIKE '$imageName'") or die(mysql_error());

while( $row = mysql_fetch_assoc( $query_ImageCollect )){
$groupFiles[] = $row;
}
$zipName="Pictures.zip";
$zip = new ZipArchive;
$zip->open($zipName, ZipArchive::CREATE);
    foreach ($groupFilesas $file) {
        $zip->addFile($file);
    }
$zip->close();
header('Content-Type: application/zip');
header('Content-disposition: attachment; filename='.$zipName);
header('Content-Length: ' . filesize($zipName));
readfile($zipName);

非常感谢任何帮助/建议。 在此先感谢:)

1 个答案:

答案 0 :(得分:3)

由于您未正确处理查询结果,因此您实际上并未向zip添加任何内容。您正尝试将$ row数组作为文件名传递给$zip->addFile()

您也不需要从查询结果创建临时数组,然后处理您可以在第一个查询结果处理循环中执行所有操作。

同样在第二次尝试中,您不会发出执行查询,因此不会有任何结果需要处理。

请尝试以下方法: -

$query_ImageCollect = "SELECT image_url 
                       FROM image_data 
                       WHERE image_dealerid='$dealer_id' 
                         AND imagename LIKE '$imageName'";

$ImageCollect = mysql_query($query_ImageCollect, $vwconn) or die(mysql_error());

$zipName="Pictures.zip";
$zip = new ZipArchive;
$zip->open($zipName, ZipArchive::CREATE); 
while( $row = mysql_fetch_assoc( $ImageCollect)) {

    // make sure you dont need to add anything to the 
    // $row['image_url'] to make a correctly pathed filename

    $zip->addFile($row['image_url']);
}

$zip->close();

header('Content-Type: application/zip');
header('Content-disposition: attachment; filename='.$zipName);
header('Content-Length: ' . filesize($zipName));
readfile($zipName);
  

如果您确实没有在任何地方报告任何错误,那么您的配置就会出现严重错误。 php错误文件应该是HUGH。

     

另外请不要使用多年来已被弃用的mysql_数据库扩展,特别是如果这是一个新的开发。 See this for help转移到mysqli_PDO