ID: 49938
Updated by: [email protected]
-Summary: Phar::startBuffering() didn't work. After this
isBuffering() returns false.
Reported By: nodkz at mail dot ru
-Status: Assigned
+Status: Analyzed
Bug Type: PHAR related
Operating System: Windows XP
PHP Version: 5.3.1RC2
Assigned To: cellog
New Comment:
The only bug is that Phar::isBuffering() has its values inverted.
It is not performant to use the buffering feature for extremely large
phar archives. Instead, use this code:
<?php
mkdir(__DIR__ . '/fillit');
for($i=0;$i<100000;$i++) {
// write data in files XXX/XXX.txt
@mkdir(__DIR__ . '/fillit/' . floor($i/1000));
file_put_contents(__DIR__ . '/fillit/' .
floor($i/1000).'/'.($i%1000).'txt', 'some
data');
echo $i,"\n";
}
echo "building\n";
$phar = new Phar('test1.phar');
$a = time(true);
$phar->buildFromDirectory(__DIR__ . '/fillit');
$b = time(true);
echo "done in ", $b - $a, " seconds\n";
echo count($phar),"\n";
?>
I get 100000 files added in approximately 118 seconds. The code you
supplied takes well over that just for the first 10000 files.
Previous Comments:
------------------------------------------------------------------------
[2009-10-21 07:57:23] nodkz at mail dot ru
Description:
------------
I need add 100 000 files to phar arhive.
First 1000 files insert very quick. But when I insert from 9000 to
10000, it works about 20 minutes.
I found that every changes writes to disk. In documentation I so
buffering operation to maket set of change, before writing to disk. If I
run startBuffering()/stopBuffering() commands.
So I try to run startBuffering() on PHP 5.2.11 - it doesn't work.
So I install PHP5.3.1RC2 - it doesn't work again.
Reproduce code:
---------------
$phar = new Phar('test.phar');
$phar->startBuffering();
var_dump($phar->isBuffering());
for($i=0;$i<100000;$i++) {
// write data in files XXX/XXX.txt
$phar->addFromString( floor($i/1000).'/'.($i%1000).'txt', 'some
data');
}
$phar->stopBuffering();
Expected result:
----------------
Expect to see
bool(true)
Actual result:
--------------
But scripts shows:
bool(false)
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=49938&edit=1