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