如果我上传一个zip文件并重命名,ZipArchive函数会在我尝试提取时抛出ER_NOZIP错误,而如果我上传并且不重命名,则会提取没有问题。
这是一个已知问题还是我做错了什么?任何帮助都会很棒!
有关详情的编辑: 过程是这样的:我可以在我的主机上压缩文件夹并使用ZipArchive在我的浏览器中通过PHP下载它。然后我有一个进程,我可以上传该zip文件并使用ZipArchive将其解压缩到我的主机上。这很好用。当我下载具有相同名称的内容时,问题似乎就出现了,Windows为其命名为" My_file(2).zip"。
当我上传此文件时,当我收到NOZIP错误时。我使用rename()函数更改它的名称以删除空格等,以便它变成" my_file_2.zip"但它仍然会引发错误。似乎只有最初命名的文件才有效。
答案 0 :(得分:0)
经过大量的来回测试后我发现了它,虽然现在看起来很明显。
当我从脚本/浏览器下载新创建的zip时,标题mime类型随机影响了该文件(不确定为什么未更改的zip存档工作,但重命名的文件仍然没有)。 / p>
无论哪种方式,在下载脚本中使用这些标题似乎已完全解决了这个问题:
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mimeType = finfo_file($finfo, $zipDir);
header("Cache-Control: private, max-age=120, must-revalidate");
header("Pragma: no-cache");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // long ago
header("Content-Type: $mimeType");
header("Content-Transfer-Encoding: Binary");
header("Content-disposition: attachment; filename=\"" . basename($zipDir) . "\"");
header("Accept-Ranges: bytes");
header("Content-Length: " . filesize($zipDir));
以前脚本使用application/octet-stream
作为mime类型,并且将其更改为使用正确的zip mime似乎可以解决问题,因此即使重命名文件等也不会导致错误。
希望这也有助于其他可能遇到类似问题的人。