Symfony1 Symfony批处理操作

Symfony1 Symfony批处理操作,symfony1,batch-file,zip,Symfony1,Batch File,Zip,我正在尝试创建一个批处理操作(symfony admin),它支持创建/动态下载包含用户照片的zip文件,这些照片可以在uploads/images目录中找到 以下是我已经实现的代码: public function executeBatchDownloadFotos(sfWebRequest $request) { $zip = new ZipArchive(); // atheletes identifiers $ids = $req

我正在尝试创建一个批处理操作(symfony admin),它支持创建/动态下载包含用户照片的zip文件,这些照片可以在uploads/images目录中找到

以下是我已经实现的代码:

public function executeBatchDownloadFotos(sfWebRequest $request)
    {
        $zip = new ZipArchive();

        // atheletes identifiers
        $ids = $request->getParameter('ids');

        // get all the atheletes objects
        $q = Doctrine_Query::create()
            ->from('Atleta a')
            ->whereIn('a.id', $ids);

        foreach ($q->execute() as $atleta)
        {
            $zip->addFile($atleta->id . '_' . $atleta->Clube . '.jpg', 'uploads/atletas/' . $atleta->id . '_' . $atleta->Clube . '.jpg');
        }
    }
另一方面,以下是视图配置:

BatchDownloadFotos:
  http_metas:
    content-type: application/zip
  has_layout:     false

由于某些原因,每次执行批处理操作时,浏览器都不会提示我使用窗口下载zip文件。

在控制器文件中创建zip存档后,应将内容发送到浏览器

您可以使用此处描述的方法执行此操作:

现在您正在尝试创建ZIP文件,但没有将其发送到浏览器。应该使用setContent()和setHttpHeader()方法

您的操作可能如下所示(您应该添加错误处理):


你好!我应该在setHttpHeader()方法中放置什么?谢谢你的帮助!顺致敬意,您应该设置HTTP头的名称和值:。因此,在您的情况下,它应该是“内容类型”和“应用程序/zip”。您还应该设置“内容处置”标题:您好!在运行代码时,我注意到test.zip文件不是在/tmp/目录中创建的。你知道为什么会出现这个问题吗?谢谢你的帮助,祝你好运!检查是否已加载zip扩展名。您可以运行'php-m'命令或使用phpinfo()函数。
public function executeIndex(sfWebRequest $request)
{
  $fileName = '/tmp/test.zip';
  $zip = new ZipArchive();

  $zip->open($fileName, ZipArchive::CREATE);

  // add some files to archive
  $zip->addFile('/tmp/test', 'test.txt');

  $zip->close();

  $this->getResponse()->setContent(file_get_contents($fileName));
  $this->getResponse()->setHttpHeader('Content-Type', 'application/zip');
  $this->getResponse()->setHttpHeader('Content-Disposition',
    'attachment; filename=download.zip');

  return sfView::NONE;
}