0

我正在发出一个 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。

4

1 回答 1

1

正如评论中提到的@crontab,zip_open在失败时返回错误代码,如文档中所述

返回值

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

您可以通过将其与本手册页上预定义的错误常量(特别是以ER_.

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


我刚刚看到您的编辑,您看到的错误代码是 integer 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
}
于 2013-01-18T20:01:47.497 回答