#49938 [Ana->Csd]: Phar::isBuffering() returns inverted value
| From: | dsp@php.net | Date: | Mon, 11 Jan 2010 10:58:11 +0000 |
| Subject: | #49938 [Ana->Csd]: Phar::isBuffering() returns inverted value | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-146530@lists.php.net to get a copy of this message | ||
ID: 49938
Updated by: dsp@php.net
Reported By: nodkz at mail dot ru
-Status: Analyzed
+Status: Closed
Bug Type: PHAR related
Operating System: Windows XP
PHP Version: 5.3.1RC2
Assigned To: cellog
New Comment:
This bug has been fixed in SVN.
Snapshots of the sources are packaged every three hours; this change
will be in the next snapshot. You can grab the snapshot at
http://snaps.php.net/.
Thank you for the report, and for helping us make PHP better.
Previous Comments:
------------------------------------------------------------------------
[2009-11-13 00:58:12] svn@php.net
Automatic comment from SVN on behalf of cellog
Revision: http://svn.php.net/viewvc/?view=revision&revision=290647
Log: fix PHP Bug #49938: Phar::isBuffering() returns inverted value
------------------------------------------------------------------------
[2009-11-13 00:16:11] cellog@php.net
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.
------------------------------------------------------------------------
[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