Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如果上载后重命名文件,ZipArchive将引发错误_Php_Ziparchive - Fatal编程技术网

Php 如果上载后重命名文件,ZipArchive将引发错误

Php 如果上载后重命名文件,ZipArchive将引发错误,php,ziparchive,Php,Ziparchive,如果我上传一个zip文件并对其重命名,当我试图提取它时,ZipArchive函数会抛出一个ER_NOZIP错误,而如果我上传但不重命名它,则提取时不会出现任何问题 这是一个已知的问题还是我做错了什么?任何帮助都会很好 有关详细信息,请编辑: 这个过程是这样的:我可以在我的主机上压缩一个文件夹,然后使用ZipArchive在我的浏览器中通过PHP下载它。然后我有一个过程,我可以上传这个zip文件,并使用ZipArchive在我的主机上解压它。这个很好用。当我下载同名的东西,Windows给它起了一

如果我上传一个zip文件并对其重命名,当我试图提取它时,ZipArchive函数会抛出一个ER_NOZIP错误,而如果我上传但不重命名它,则提取时不会出现任何问题

这是一个已知的问题还是我做错了什么?任何帮助都会很好

有关详细信息,请编辑: 这个过程是这样的:我可以在我的主机上压缩一个文件夹,然后使用ZipArchive在我的浏览器中通过PHP下载它。然后我有一个过程,我可以上传这个zip文件,并使用ZipArchive在我的主机上解压它。这个很好用。当我下载同名的东西,Windows给它起了一个类似“My_file(2).zip”的名字时,问题似乎就来了


当我上传这个文件时,我得到了NOZIP错误。我使用rename()函数更改它的名称以删除空格等,使其成为“my_file_2.zip”,但它仍然会抛出一个错误。似乎只有最初命名的文件才能工作。

经过反复测试,我找到了它,尽管现在看起来很明显

似乎当我从脚本/浏览器下载新创建的zip时,头mime类型随机地影响了文件(不确定为什么未更改的zip存档有效,但重命名的文件仍然无效)

无论采用哪种方式,在下载脚本中使用这些标题似乎已经完全解决了问题:

    $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似乎可以解决问题,因此即使重命名文件等也不会再导致错误

希望这也能帮助其他可能遇到类似问题的人