【发布时间】:2021-07-18 11:01:24
【问题描述】:
提前感谢您的帮助
这发生在 Ubuntu 20.10 机器和带有 apache 和 php 5.2 的服务器上
让我粘贴代码:
$elementsToDownload = array(
'productTableCSV' => $productTableCSVString,
'productTableLangCSV' => $productTableLangCSVString,
'productTableShopCSV' => $productTableShopCSVString
);
// var_dump($elementsToDownload);
$zipname = 'productCSVs.zip';
$zip = new ZipArchive;
$zip->open($zipname, ZipArchive::CREATE);
foreach ($elementsToDownload as $key => $csvString) {
if (! $zip->addFromString("$key.csv", $csvString)) {
echo 'Could not add file to ZIP: ' . "$key.csv";
die();
}
}
$zip->close();
ob_clean();
header('Content-Type: application/zip');
header('Content-disposition: attachment; filename='.$zipname);
header('Content-Length: ' . filesize($zipname));
readfile($zipname);
unlink($zipname);
这里看起来应该有问题,因为我可以随机下载 zip。浏览器不时抱怨无法下载文件。虽然这并不总是发生,但这是 Firefox 显示的消息:
/tmp/mozilla_manu0/h03iaHVG.zip.part 无法保存,因为无法读取源文件。
稍后再试,或联系服务器管理员。
这发生在 Firefox 中。
无论是 Mate Engrampa 存档管理器,XArhiver 都无法打开该文件。令人惊讶的是,如果我在命令行中运行 unzip -t productCSVs.zip,它不会报告任何错误。如果我在终端中解压缩文件,我也可以不使用 -t 选项,但没有桌面应用程序可以打开它。
添加一些额外的信息,我用来生成文件的 PHP 版本已经很旧了,5.2,但这是我在公司更新他们的系统之前所拥有的版本,预计将来会更新。
谁能想到会发生这种情况的任何原因?
编辑:
我刚刚意识到,即使我在终端中解压缩文件时没有错误,我也会在开头或 zipfile 中收到关于 1 个额外字节的警告:
manu@manu-NUC8i7BEH:/tmp/mozilla_manu0$ unzip -t productCSVs.zip
Archive: productCSVs.zip
warning [productCSVs.zip]: 1 extra byte at beginning or within zipfile
(attempting to process anyway)
testing: productTableCSVString.csv OK
testing: productTableLangCSVString.csv OK
testing: productTableShopCSVString.csv OK
testing: productTableCSV.csv OK
testing: productTableLangCSV.csv OK
testing: productTableShopCSV.csv OK
No errors detected in compressed data of productCSVs.zip.
我还是不明白这里发生了什么
【问题讨论】:
标签: php linux ubuntu ziparchive php-5.2