Edit report at https://bugs.php.net/bug.php?id=65288&edit=1
ID: 65288
User updated by: crayonviolent at phpfreaks dot com
Reported by: crayonviolent at phpfreaks dot com
Summary: ZipArchive::getStatusString returns wrong error
message
Status: Wont fix
Type: Bug
Package: Zip Related
Operating System: Irrelevant
PHP Version: Irrelevant
Block user comment: N
Private report: N
New Comment:
Okay well thanks for the workaround...
But as an IMO.. getStream SHOULD return an error. The commit comment says
"Look
for an entry should not raise an error". Well the prefix of the function is
"get" not "look". getStream attempts to GET something, not just look to see if
it exists. If the purpose of the method were to ONLY check for existence, I
would agree that if it does not find something, it should return false and no
error should be passed to status (getStatusString). In other words, if it's
ONLY
job were to look for something, then the job would be complete. But the fact
is,
in this instance, getStream failed to complete its job.
If I run getStream, as the name implies, I should expect to get a file stream.
If not, I should instead receive a reason why it failed to do its job.
Anyways, that's my 2 cents, thanks for looking into this, and thanks for the
workaround.
Previous Comments:
------------------------------------------------------------------------
[2013-07-22 07:34:48] [email protected]
Ok, now i see what you mean. Opening a nonexistent archive item. Lookiing
through
the history i can see that this is an intentional change to libzip on PHP side,
look here http://svn.php.net/viewvc/pecl/zip/trunk/lib/zip_name_locate.c?
r1=260064&r2=260074 . Not sure it's gonna change. But you can use
->nameLocate()
as a workaround for now.
------------------------------------------------------------------------
[2013-07-19 22:41:42] crayonviolent at phpfreaks dot com
Read the example code closer. The zip is valid and will open. It is the non
existant file IN the zip that getStream isn't returning a proper error on
------------------------------------------------------------------------
[2013-07-19 07:20:12] [email protected]
In your example, it wouldn't even reach to getStream(). If there's no file,
it'll
not go through after open(). Please give an example reproducing the exact
behavior
you describe.
------------------------------------------------------------------------
[2013-07-18 14:15:05] crayonviolent at phpfreaks dot com
Description:
------------
>From the code below, if $file_name is a valid file found within $zip_file, the
contents are echo'd just fine. However, if the $file_name is not found, $fp
returns false and getStatusString() is echo'd. The problem is that it is
echoing
"No error". Shouldn't it be returning "No such file" (ER_NOENT) ?
Maybe this is actually a bug with ZipArchive::getStream or a combo of both?
Test script:
---------------
/**** begin code ****/
$zip_file='someZip.zip';
$file_name='someFile.txt';
$z = new ZipArchive();
if ($z->open($zip_file) !== true) {
echo "File not found.";
return false;
}
$fp = $z->getStream($file_name);
if (!$fp) {
echo $z->getStatusString();
} else {
fpassthru($fp);
}
/***** end code ******/
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=65288&edit=1