无法识别存档格式。 PHP 中的 ZipArchive 未返回有效格式
Archive format is not recognised. ZipArchive in PHP not returning a valid format
在此先感谢您的帮助
这发生在 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 could not be saved, because the source file could not be read.
Try again later, or contact the server administrator.
这发生在 Firefox 中。
Mate Engrampa Archive Manager 和 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 标签,中间留下了 space。像这样:
?>
<?php
因此 space 被添加到下载流中。
我删除了结束标签和开始标签,因为它们在一起,现在我从服务器下载的每个文件都可以被我所有的压缩工具识别
感谢您阅读我!
在此先感谢您的帮助
这发生在 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 could not be saved, because the source file could not be read.
Try again later, or contact the server administrator.
这发生在 Firefox 中。
Mate Engrampa Archive Manager 和 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 标签,中间留下了 space。像这样:
?>
<?php
因此 space 被添加到下载流中。
我删除了结束标签和开始标签,因为它们在一起,现在我从服务器下载的每个文件都可以被我所有的压缩工具识别
感谢您阅读我!