我正在发送一个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。
答案 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
}