ID:               49938
 Updated by:       cel...@php.net
-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

Reply via email to