I'm making a http request that will return all my files zipped. However, after attempting to open the zip file, it returns to be an integer.

$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>"; 
}

What is wrong here and how can it be fixed? Thanks in advance.

EDIT: The code number is 11.

有帮助吗?

解决方案

As @crontab mentioned in a comment, zip_open returns an error code on failure, as explained in the documentation:

Return Values

Returns a resource handle for later use with zip_read() and zip_close() or returns the number of error if filename does not exist or in case of other error.

You can determine what the error code you're seeing refers to by comparing it with the predefined error constants on this manual page, specifically the constants that begin with ER_.

There is a comment on that page which shows what the literal value of each constant is, but I don't know how accurate it is.


I just saw your edit that the error code you're seeing is the integer 11. That error code is ZIPARCHIVE::ER_OPEN, which means that PHP was unable to open the file.

You should check to make sure that the filename you're using is accurate, and that the file is readable by PHP. You can use the is_readable function to check this before you try to open any file.

Remember that just because you can open the file on the system doesn't mean that PHP can. File permissions differ between users, and PHP is very likely not running under your user account.


Alright, I just realized that you're trying to open this file via a URL. I'm not sure whether or not zip_open can open remote files, but a quick test on my machine with a remote file I'm sure exists seems to indicate that it can't. is_readable is similarly unable to process remote files.

In this case, the best thing for you to do is to download the remote file, then call zip_open on the newly created local file:

copy($remote_filename, $local_filename);
$zip = zip_open($local_filename);
if (is_resource($zip) {
  // process archive
} else {
  // handle error conditions
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top