Symfony 无法打开下载的 zip 文件

Symfony cannot open the downloaded zip file

我正在尝试下载 zip 文件。所以我试着把代码写成这样:

$zip = new ZipArchive();
$create = $zip->open($zipName, ZipArchive::CREATE);
if ($create === TRUE) { // check if the zip file is created
    $basePath = $this->container->getParameter('kernel.root_dir').'/../marks/';
    foreach ($listToken as $token) {
        $file = $repoMarks->findByToken($token);
        if($file) {
            $fileName = $file[0]->getNameOnServer();
            $filePath = $basePath . $fileName;
            $root = realpath($this->container->getParameter('kernel.root_dir') . '/../marks');
            $filePath = $root . '/' . $fileName;
            if (file_exists($filePath)) {
                $zip->addFile($filePath, $fileName);
            }
        }
    }
    $zip->close();

     $root = realpath($this->container->getParameter('kernel.root_dir') . '/../marks');
     $zipFilePath = $root . '/' . $zipName;
     // prepare BinaryFileResponse
     $response = new BinaryFileResponse($zipFilePath);
     $response->trustXSendfileTypeHeader();
     $response->headers->set('Cache-Control', 'public');
     $response->headers->set('Content-type', 'application/zip');
     $response->setContentDisposition(
         ResponseHeaderBag::DISPOSITION_INLINE,
         $zipName,
         iconv('UTF-8', 'ASCII//TRANSLIT', $zipName)
     );
     return $response;
}

我认为它是成功的。但是,当我尝试打开 zip 文件时,出现了这样的错误
An error occurred while loading the archive.



然后我试着把代码写成这样

$zip = new ZipArchive();
$create = $zip->open($zipName, ZipArchive::CREATE);
if ($create === TRUE) { // check if the zip file is created
    $basePath = $this->container->getParameter('kernel.root_dir').'/../marks/';
    foreach ($listToken as $token) {
        $file = $repoMarks->findByToken($token);
        if($file) {
            $fileName = $file[0]->getNameOnServer();
            $filePath = $basePath . $fileName;
            $root = realpath($this->container->getParameter('kernel.root_dir') . '/../marks');
            $filePath = $root . '/' . $fileName;
            if (file_exists($filePath)) {
                $zip->addFile($filePath, $fileName);
            }
        }
    }
    $zip->close();
    header('Content-Type', 'application/zip');
    header('Content-disposition: attachment; filename="' . $zipName . '"');
    header('Content-Length: ' . filesize($zipName));
    readfile($zipName);
}

但我一无所获。当我把它改成这个时,同样的事情也会发生:

$zip = new ZipArchive();
$create = $zip->open($zipName, ZipArchive::CREATE);
if ($create === TRUE) { // check if the zip file is created
    $basePath = $this->container->getParameter('kernel.root_dir').'/../marks/';
    foreach ($listToken as $token) {
        $file = $repoMarks->findByToken($token);
        if($file) {
            $fileName = $file[0]->getNameOnServer();
            $filePath = $basePath . $fileName;
            $root = realpath($this->container->getParameter('kernel.root_dir') . '/../marks');
            $filePath = $root . '/' . $fileName;
            if (file_exists($filePath)) {
                $zip->addFile($filePath, $fileName);
            }
        }
    }
    $zip->close();
    header("HTTP/1.1 303"); // 303 is technically correct for this type of redirect
    header("Location: http://{$_SERVER['HTTP_HOST']}/" . $fileName);
}

有没有人可以帮我解决这个下载 zip 文件的问题?

An error occurred while loading the archive. 发生在您的客户端是因为:

  1. 您的客户端没有任何应用程序可以打开 zip 文件。
  2. zip 文件损坏或缺少扩展名。
  3. 您可能从未更新/全新安装。尝试 更新它 sudo apt-get update
  4. 确保您的下载器应用程序(如 IDM 或 flareget)运行良好。 (我对此有疑问,当我禁用下载器应用程序时,它可以工作)-来自 Asker

客户端有问题(连接或程序错误)或文件本身有问题。尝试使用另一台电脑打开文件。