Package home | Report new bug | New search | Development Roadmap Status: Open | Feedback | All | Closed Since Version 0.14.0

Bug #13699 BZIP2 compressed files cause PHP-Thread to hang
Submitted: 2008-04-16 23:56 UTC
From: mikeziebeck Assigned:
Status: Bogus Package: PHP_Archive (version 0.11.3)
PHP Version: 5.2.5 OS: Windows XP x64 Pro
Roadmaps: (Not assigned)    
Subscription  


 [2008-04-16 23:56 UTC] mikeziebeck (Mike Ziebeck)
Description: ------------ If size of archived file exceeds 4096 byte and compression BZIP2 is used, file_get_contents hangs consuming 100% thread time. PHP 5.2.5 (cli) (built: Nov 8 2007 23:18:51) Copyright (c) 1997-2007 The PHP Group Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies with Zend Extension Manager v1.2.0, Copyright (c) 2003-2007, by Zend Technologies with Zend Optimizer v3.3.0, Copyright (c) 1998-2007, by Zend Technologies Test script: --------------- <?php function testPharCompression($fileSize, $compressionType=false){ echo(str_pad("Testing fileSize($fileSize) / compressionType($compressionType)",66)); $p=new Phar(dirname(__FILE__)."/".( $pArchive="DataArchive" ).".phar", 0, $pArchive); file_put_contents("phar://$pArchive/".($fileName="DataFile.dat"), $data=str_pad("", $fileSize)); echo("Writing Done / Reading"); if($compressionType) $p->$compressionType(); echo(" Done ".( file_get_contents("phar://$pArchive/$fileName")==$data ? "O.K." : "Failed" )."\r\n"); } foreach(array(4096,4097) as $fileSize){ testPharCompression($fileSize); testPharCompression($fileSize, "compressAllFilesGZ"); testPharCompression($fileSize, "compressAllFilesBZIP2"); } ?> Expected result: ---------------- Testing fileSize(4096) / compressionType() Writing Done / Reading Done O.K. Testing fileSize(4096) / compressionType(compressAllFilesGZ) Writing Done / Reading Done O.K. Testing fileSize(4096) / compressionType(compressAllFilesBZIP2) Writing Done / Reading Done O.K. Testing fileSize(4097) / compressionType() Writing Done / Reading Done O.K. Testing fileSize(4097) / compressionType(compressAllFilesGZ) Writing Done / Reading Done O.K. Testing fileSize(4097) / compressionType(compressAllFilesBZIP2) Writing Done / Reading Done O.K. Actual result: -------------- Testing fileSize(4096) / compressionType() Writing Done / Reading Done O.K. Testing fileSize(4096) / compressionType(compressAllFilesGZ) Writing Done / Reading Done O.K. Testing fileSize(4096) / compressionType(compressAllFilesBZIP2) Writing Done / Reading Done O.K. Testing fileSize(4097) / compressionType() Writing Done / Reading Done O.K. Testing fileSize(4097) / compressionType(compressAllFilesGZ) Writing Done / Reading Done O.K. Testing fileSize(4097) / compressionType(compressAllFilesBZIP2) Writing Done / Reading^

Comments

 [2008-04-17 01:51 UTC] cellog (Greg Beaver)
this is a bug in pecl/phar (http://pecl.php.net/phar) The confusion is more than understandable :) Incidentally, the CVS version of pecl/phar contains a tremendous number of fixes and is a few days away from a beta release of 2.0. compressAllFilesBZIP2 has been renamed to compressFiles() and accepts Phar::BZ2 as an argument, so your script calls to $phar->compressAllFilesBZIP2(); become $phar->compressFiles(Phar::BZ2); You might also try the 2.0.0a2 release, which still contains compressAllFilesBZIP2()
 [2008-04-17 17:31 UTC] mikeziebeck (Mike Ziebeck)
Using latest official Binary release: ------------------------------------- PECL 5.2.5 Win32 binaries [2,879Kb] - 08 November 2007 PHP 5.2.5 zip package [9,713Kb] - 08 November 2007 =>The provided test indeed exposes native bug-behaviour. Using v5.2.6RC6-dev Snapshot release: ------------------------------------- http://snaps.php.net/win32/php5.2-win32-200804171230.zip http://snaps.php.net/win32/pecl5.2-win32-200804171230.zip => The test case needs some modification as shown below. <? function testPharCompression($data, $compType=false){ echo(str_pad("Testing fileSize(".strlen($data). ") / compressionType($compType)", 66)); $pArchive="DataArchive.phar"; $fileName="phar://$pArchive/DataFile.dat"; $p=new Phar(dirname(__FILE__)."/$pArchive", 0, $pArchive); $p->setStub('<? __HALT_COMPILER(); ?>'); // remove HEADER-STUB file_put_contents($fileName, $data); echo("Writing Done / Reading"); if($compressionType) $p->compressFiles($compType); $result=(file_get_contents($fileName)==$data ? "O.K." : "Failed"); echo(" Done $result\r\n"); } foreach( array( false, Phar::GZ, Phar::BZ2) as $compType) foreach( array( 4096, 4097) as $fileSize) testPharCompression( str_pad("", $fileSize), $compType); ?> Expected result: ---------------- Testing fileSize(4096) / compressionType() Writing Done / Reading Done O.K. Testing fileSize(4097) / compressionType() Writing Done / Reading Done O.K. Testing fileSize(4096) / compressionType(4096) Writing Done / Reading Done O.K. Testing fileSize(4097) / compressionType(4096) Writing Done / Reading Done O.K. Testing fileSize(4096) / compressionType(8192) Writing Done / Reading Done O.K. Testing fileSize(4097) / compressionType(8192) Writing Done / Reading Done O.K. Actual result: -------------- Testing fileSize(4096) / compressionType() Writing Done / Reading Done O.K. Testing fileSize(4097) / compressionType() Writing Done / Reading Done O.K. Testing fileSize(4096) / compressionType(4096) Writing Done / Reading Done O.K. Testing fileSize(4097) / compressionType(4096) Writing Done / Reading Done O.K. Testing fileSize(4096) / compressionType(8192) Writing Done / Reading Done O.K. Testing fileSize(4097) / compressionType(8192) Writing Done / Reading Done O.K. Conclusion: ------------ Working fine on snapshot release. Waiting for release 5.2.6
 [2008-04-17 19:26 UTC] cellog (Greg Beaver)
please use the pecl bug tracker at pecl.php.net, not pear PHP_Archive is not phar