Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 尝试创建zip文件以下载多张图片_Php - Fatal编程技术网

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

Php 尝试创建zip文件以下载多张图片,php,Php,在过去的一个小时里,我一直在玩下面的脚本,不知道到底出了什么问题 想法是什么:- 基本上,我有一个保存图像数据的数据库,我调用该数据(图像文件名),试图将其放入数组中,然后传递给zip创建脚本 以下是我所拥有的:- 我还尝试将结果直接解析到数组中,但也失败了:- $query_ImageCollect = ("SELECT image_url FROM image_data WHERE image_dealerid='$dealer_id' AND imagename LIKE '$imageN

在过去的一个小时里,我一直在玩下面的脚本,不知道到底出了什么问题

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

以下是我所拥有的:-

我还尝试将结果直接解析到数组中,但也失败了:-

$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);
如有任何帮助/建议,将不胜感激。
提前感谢:)

您实际上没有向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数据库扩展,它已经被弃用多年了,特别是如果这是一个新的开发。移动到
mysqli\uu
PDO


你说的“失败”是什么意思?具体错误在哪里?语法:
foreach($groupFilesas$file){
fix to
foreach($groupFilesas$file){
在两次尝试中,
$groupFiles
和单词
as
之间的空格在开发过程中,请在
php.ini
中将此参数修改为
display\u errors=On
。或者,如果您愚蠢到在live server上开发,
ini\u set,则至少将其添加为所有代码的第一行('display_errors','1')
@Kyle-感谢您的快速回复。错误日志或错误报告中没有显示任何内容,zip文件会按原样加载到浏览器中。尽管zip文件已损坏。最好还是在您正在开发的
错误报告(E|error | E|u WARNING | E|u PARSE | E| E|u NOTICE)代码中使用这两行代码;ini|set('display_errors','1')
感谢您的解释,这绝对有助于清理我的编码!我为您推荐了一位Smokey-他们有PDO。
$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);