Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.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 Symfony 2:在一个Zip文件中下载多个图像文件_Php_Symfony_Request_Zip - Fatal编程技术网

Php Symfony 2:在一个Zip文件中下载多个图像文件

Php Symfony 2:在一个Zip文件中下载多个图像文件,php,symfony,request,zip,Php,Symfony,Request,Zip,我想在一个zip中下载多个文件,但它不起作用:下载的zip文件夹仍然是空的,类似于opt/lampp/htdocs/MYPROJECT/。。。我想要哪一个简单的像/filename.zip 我的控制器,我只是从数据库中获取所有文件名,并将它们与实际保存它们的目录名连接起来: $response = new Response(); // Get the entity manager $em = $this->getDoctrine()->getManager();

我想在一个zip中下载多个文件,但它不起作用:下载的zip文件夹仍然是空的,类似于opt/lampp/htdocs/MYPROJECT/。。。我想要哪一个简单的像/filename.zip

我的控制器,我只是从数据库中获取所有文件名,并将它们与实际保存它们的目录名连接起来:

$response = new Response();
    // Get the entity manager
    $em = $this->getDoctrine()->getManager();

    //Collect all the result from the database and zip all the files related
    $files = $em->getRepository('IballotCmsBundle:Result')->findAll();

    $directory = __DIR__.'/../../../../web/uploads/pinkSheet';
    //$directory = __DIR__.'/../temp/de.jpg';

    $filename = 'all.zip';
    $zip = new ZipArchive;
    $zip->open($filename, ZipArchive::CREATE);

    foreach ($files as $file) {
        $zip->addFile($directory.'/'.$file->getImage());
    }

    $zip->close();

    $response->headers->set('Cache-Control', 'private');
    $response->headers->set('Content-type', mime_content_type($filename));
    $response->headers->set('Content-Disposition', 'attachment; filename="' . basename($filename) . '"');
    $response->headers->set('Content-length', filesize($filename));

    // Send headers before outputting anything
    $response->sendHeaders();

    $response->setContent(readfile($filename));

    return $response;

我认为这与这一行代码有关:

$filename = 'all.zip';
$zip = new ZipArchive;
$zip->open($filename, ZipArchive::CREATE);
您正在尝试创建名为
all.zip的zip文件,但尚未指定实际路径<代码>$filename
应该是这样的:

$filename = '/absolute/path/to/all.zip'
关于zip文件的结构,您需要阅读,其中有一个很好的示例:

$zip = new ZipArchive;
if ($zip->open('test.zip') === TRUE) {
    $zip->addFile('/path/to/index.txt', 'newname.txt');
    $zip->close();
    echo 'ok';
} else {
    echo 'failed';
}

这将把
/path/to/index.txt
文件添加到
test.zip
中,文件名为
newname.txt
,而不是
/path/to/index.txt
。您可以使用第二个参数控制目录(查看文档中的注释了解更多信息)

what say error.log,然后尝试通过
$res=$zip->open($filename,ZipArchive::CREATE)捕获错误;var_dump($res);死亡以上代码返回trueOk。您检查了php错误日志吗?对不起:日志文件在哪里?因为在您使用apache2服务器之前,我从未尝试过检查它?我尝试过,但不起作用:$zip->addFile($directory.'/'.$item->getImage(),'newname.txt');你能澄清一下你的zip文件是否被创建了,如果是的话,它是否存储在正确的路径中?文件没有被创建,尽管zip文件被创建了,我的意思是:zip文件无效