当前位置: 首页 > 知识库问答 >
问题:

在通过浏览器下载PHP创建的文件后,无法解压缩该文件

公孙琛
2023-03-14
    $zip = new ZipArchive();
    $filename = $first_name . ".zip";

    if ($zip->open($filename, ZipArchive::CREATE)!==TRUE) {
        exit("cannot open <$filename>\n");
    }

    $zip->addFile($first_name . ".clean");
    $zip->addFile($first_name . ".log");
    $zip->addFile($first_name . ".result");
    $zip->addFile($first_name . ".txt");
    $zip->close();

    header("Content-type: application/octet-stream"); 
    header("Content-Disposition: attachment; filename=$filename");
    header("Content-length: " . filesize($filename));
    header("Expires: 0"); 
    header("Pragma: public");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Cache-Control: public");
    header("Content-Description: File Transfer");
    header('Cache-Control: max-age=0'); // no cache
    header("Content-Transfer-Encoding: binary");
    ob_end_flush();
    readfile("$filename");

我试图通过PHP代码创建一个.zip文件,并通过浏览器在localhost上下载它。下载的zip无法解压缩,并给出如下错误消息:

归档:未找到upload_pnt-prs.zip中央目录结束签名。要么这个文件不是zipfile,要么它构成了多部分归档的一个磁盘。在后一种情况下,中央目录和zipfile注释将在这个归档的最后一个磁盘上找到。解压缩:在upload_pnt-prs.zip或upload_pnt-prs.zip.zip中找不到zipfile目录,也找不到upload_pnt-prs.zip.zip,period。

我已经尝试了一些解决方案,但这并没有解决我的问题。请帮忙....

共有1个答案

西门京
2023-03-14

也许你应该重新安排标题顺序。我尝试了下面的代码,它工作了

header('Pragma: public');   // required
header('Expires: 0');       // no cache
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Last-Modified: '.gmdate ('D, d M Y H:i:s', filemtime ($filename)).' GMT');
header('Cache-Control: private',false);
header('Content-Type: application/zip');
header('Content-Disposition: attachment; filename="'.$filename.'"');
header('Content-Transfer-Encoding: binary');
header('Content-Length: '.filesize($filename)); // provide file size
header('Connection: close');
readfile($filename);
exit();

希望这对你有用

 类似资料:
  • 我有一个来自不同位置的文件列表。我使用以下代码创建了一个zip文件,该代码可以正常工作。但是,当我尝试在Windows中使用Extract All解压文件时,无法找到任何字节,但是如果我使用Windows资源管理器双击zip文件本身,我可以看到文件,并且可以打开单个文件并包含正确的数据

  • 我创建了一个zip文件使用java zip实用程序,我有以下目录结构内的zip文件。 测试。txt-文件 迈拉贝尔。lbl-文件 aux-directory(在这个目录中,我有一些其他文件,如下所示) 我的文件。lbl 第一档。文本 这是一个只有代码的“aux”目录,文件下载后可以用7zip打开,并正确显示目录结构。 当我尝试用WinRAR解压文件时,它只解压所有外部目录文件,并显示一条错误消息。

  • 我有一个用于PHP的Debian服务器。我有目录 /var/www我的php文件存储。 整个目录和所有文件属于ftpuser: internetuser。此目录中的每个文件都具有权限664。 现在有一个问题。还有664权限的zip存档。如果我运行php脚本来提取归档文件,那么所有提取的文件都具有644权限,并且属于www-data:internetuser。 使用权限664提取我的文件的最佳方法是

  • 问题内容: 我想使用urllib下载文件,并在保存之前对文件进行解压缩。 这就是我现在所拥有的: 最终将写入空文件。我该如何实现自己的追求? 更新的答案: 问题答案: 在写完之后,但要传递给之前,您需要寻找到开始的地方。否则它将被模块从头读取,并显示为空文件。见下文:

  • 本文向大家介绍java多文件压缩下载的解决方法,包括了java多文件压缩下载的解决方法的使用技巧和注意事项,需要的朋友参考一下 Java多文件压缩下载解决方案,供大家参考,具体内容如下 需求: 会员运营平台经过改版后页面增加了许多全部下载链接,上周上线比较仓促,全部下载是一个直接下载ZIP压缩文件的链接,每个ZIP压缩文件都是由公司运营人员将页面需要下载的文件全部压缩成一个ZIP压缩文件,然后通过

  • 问题内容: 我想解压缩文件,这可以正常工作 但是我需要通过URL传递文件名,而无法使其正常工作,这就是我所拥有的。 我想念什么?我知道这一定是我忽略的小而愚蠢的事情。 谢谢, 问题答案: 我只能假设您的代码来自在线某个地方的教程?在这种情况下,请尝试自己解决这个问题。另一方面,该代码实际上可以在线发布为解压缩文件的正确方法,这有点令人恐惧。 PHP具有用于处理压缩文件的内置扩展。不需要为此使用调用