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] a...@php.net

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] a...@php.net

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

Reply via email to