Edit report at https://bugs.php.net/bug.php?id=65288&edit=1
ID: 65288 Updated by: a...@php.net Reported by: crayonviolent at phpfreaks dot com Summary: ZipArchive::getStatusString returns wrong error message Status: Open Type: Bug Package: Zip Related Operating System: Irrelevant PHP Version: Irrelevant Block user comment: N Private report: N New Comment: 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. Previous Comments: ------------------------------------------------------------------------ [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