1

我正在为压缩图像创建一个 PHP 自动下载器。但是,下载的 ZIP 是空的!希望有人会知道这个问题 - 它一定很简单。

非常感谢,尼克。

PHP

    foreach($_SESSION["photoBasket"] as $id){
       $files[] = array(
               "loc" => "../photos/$id.png",
               "name" => "$id.png"
                );
    }

    $zipname = tempnam(sys_get_temp_dir(), 'zip');
        $zip = new ZipArchive();
        $zip->open($zipname, ZipArchive::CREATE);
        foreach ($files as $file) {
          $zip->addFile($file["loc"],$file["name"]);
          //$zip->addFromString($file["name"],"something here"); WORKS FINE
        }
        $zip->close();

        header("Pragma: public");
        header("Expires: 0");
        header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
        header('Content-Type: application/zip');
        header('Content-Disposition: attachment; filename=test.zip');
    readfile($zipname);
    unlink($zipname);
4

1 回答 1

4

您必须在可写文件夹中创建文件;此外,您的文件名应该是唯一的,这样两个人同时下载 ZIP 就不会互相覆盖。让 PHP 使用tempnam()sys_get_temp_dir()来解决这个问题。并且不要忘记在将临时文件发送到网络后将其删除!

$zipname = tempnam(sys_get_temp_dir(), 'zip');
...
unlink($zipname);
于 2012-12-15T22:32:00.417 回答