无法从http请求解压缩/解压缩zip文件

时间:2013-01-18 19:47:19

标签: php ziparchive error-code

我正在发送一个http请求,它会返回我压缩的所有文件。但是,在尝试打开zip文件后,它将返回一个整数。

$zip = zip_open("http://this/returns/zip/file");

while($zipFile = zip_read($zip)) 
{ 
    echo "Filename: " . zip_entry_name($zipFile) . "<br>"; 
    echo "Compressed Size: " . zip_entry_compresedsize($zipFile) . "<br>"; 
    echo "Real Size: " . zip_entry_filesize($zilFile) . "<br><br>"; 
}

这里有什么问题,如何修复?提前谢谢。

编辑:代码为11。

1 个答案:

答案 0 :(得分:1)

正如@crontab在评论中提到的那样,zip_open会在失败时返回错误代码,如the documentation中所述:

  

返回值

     

返回一个资源句柄,供以后与zip_read()和zip_close()一起使用,或者如果filename不存在或者出现其他错误,则返回错误数。

您可以通过将this manual page上的预定义错误常数(尤其是以ER_开头的常量进行比较来确定您所看到的错误代码所指的错误代码。

该页面上有一条评论,显示每个常量的字面值,但我不知道它的准确程度。


我刚刚看到您的编辑,您看到的错误代码是整数11。该错误代码为ZIPARCHIVE::ER_OPEN,这意味着PHP无法打开该文件。

您应该检查以确保您使用的文件名是准确的,并且该文件可由PHP读取。在尝试打开任何文件之前,您可以使用is_readable函数进行检查。

请记住,仅仅因为可以在系统上打开文件并不意味着PHP可以。用户之间的文件权限不同,PHP很可能无法在您的用户帐户下运行。


好吧,我刚刚意识到您正在尝试通过URL打开此文件。我不确定zip_open是否可以打开远程文件,但是我确定存在远程文件的机器上的快速测试似乎表明它不能。 is_readable同样无法处理远程文件。

在这种情况下,您要做的最好的事情是下载远程文件,然后在新创建的本地文件上调用zip_open

copy($remote_filename, $local_filename);
$zip = zip_open($local_filename);
if (is_resource($zip) {
  // process archive
} else {
  // handle error conditions
}