PHP header 附件下载损坏了 ZIP 文件

PHP header attachment download corrupts ZIP file

我的服务器上有一个类似“983Y4938920820894838947”的文件,我希望用户将其另存为 "subject.zip"。

使用 header 位置可以进行下载并且文件没有损坏。

每当我使用带有附件、内容类型和新文件名的 headers 时,下载的 zip 文件已损坏(我想?)。

每当我打开 ZIP 文件(例如 test.zip)时,它都会生成一个名为 test.zip.cpgz 的新文件。我假设这是 mac 表示文件已损坏的方式。

我正在使用以下代码

// 下载 ZIP 文件

header("Content-Type: application/zip");
header('Content-Disposition: attachment; filename="' . stripslashes($new_filename) . '"');
readfile($filename);

这会使文件损坏,而下面的代码可以正常工作(但不会更改名称):

header("Location: $filename");

我尝试了其他 headers 但没有成功。有人知道吗?谢谢!

你少了一个header,如果你不指定内容长度,浏览器将不知道文件的大小:

header("Content-Length: {{replace.with.your.file.size}}");

也许这会解决您的问题。

问题是我有回声。回声使 zip 损坏。因此,它只在 header 位置起作用,而不是用于更改文件名的常规 headers 是有道理的。删除回声为我修复了它。