Bug #13860 Updated: Bzip2 bzdecompress function is wery slow...
| From: | jeroen@php.net | Date: | Sun, 28 Oct 2001 21:27:24 +0000 |
| Subject: | Bug #13860 Updated: Bzip2 bzdecompress function is wery slow... | ||
| References: | 1 | Groups: | php.dev |
| Request: | Send a blank email to php-dev+get-69215@lists.php.net to get a copy of this message | ||
ID: 13860
Updated by: jeroen
Reported By: mcdouglas@angelfire.com
Old Status: Open
Status: Bogus
Old Bug Type: Bzip2 Related
Bug Type: Performance problem
Operating System: Windows 98 SE
PHP Version: 4.0.6
New Comment:
Please don't but multiple issues in one report, and keep your report short. (bugs do's and
don'ts)
I'm transforming this report into performance question of bzip, open a new feature/change
request on the second parameter.
you use bzdecompress(..., TRUE), i.e. you tell it to be two times slower... Then you shouldn't
complain about performance, bzip is very strong compression at the cost of high memory and cpu
usage. And you read the whole file in memory, decompress it, write it back to disk... that's
very inefficient. So this is not a bug in PHP, but a problem with your script. Ask http://www.php.net/support.php for support questions on
how to do things efficiently.
Compressing JPG's is a quite useless practice by the way... jpg is already compressed.
Previous Comments:
------------------------------------------------------------------------
[2001-10-28 15:57:28] mcdouglas@angelfire.com
bzdecompress($ecd_cont,1);
I'm used it without the 1 parameter, i'm just tryed uot what happen if i use it...
------------------------------------------------------------------------
[2001-10-28 15:34:18] mcdouglas@angelfire.com
I made a little decompresser script:
<?php
$efilename = "d:/pic.bz2"; //A compressed jpg image ( original size: 388kbyte, packed
size: 388kbyte)
$ufilename2 = "d:/pic.jpg";
$fp = fopen($efilename, "rb");
$ecd_cont = fread($fp, filesize($efilename)); //read the compressed data from file
fclose($fp);
$fp = fopen($ufilename2,"wb");
$ecd_cont = bzdecompress($ecd_cont,1); //decompress the readed compressed data
fwrite($fp, $ecd_cont); //write the decompressed data into file
fclose($fp);
echo "<img src=\"file://d:\\pic.jpg\">";
?>
Ok, this is work... But it is WERY WERY slow!!! It's take 60sec to display the decompressed
image, why??
I made the decompression befor with an other method:
<?php
$efilename = "d:/pic.bz2";
$ufilename2 = "d:/pic.jpg";
$bz = bzopen($efilename, "rb");
$ecd_cont = bzread($bz, 400000); // See below
bzlose($bz);
$fp = fopen($ufilename2,"wb");
fwrite($fp, $ecd_cont);
fclose($fp);
echo "<img src=\"file://d:\\pic.jpg\">";
?>
Ok this is working (And this is fast! The decompressed picture appears immediately), but there is a
little problem:
In the PHP manual I read this about the bzread() function:
"If the optional parameter length is not
specified, bzread() will read 1024 (uncompressed) bytes at a time."
Ok, so it will read 1024 uncompressed bytes from my compressed file, if I not give the lenght
parameter (as I did in the example). But there is a problem: if I want to be precise then I must
give the lenght of the original file, but how??? I only have the compressed file, which is not equal
with the original (ok, in my example it is, but only because the original jpg-compressed file), so I
cant use the filesize() function, because it gave only the compressed filesize, neither the strlen()
because I havnt got a string yet :)
And I think you agree with me if I dont want to write 400Mbyte to parameter... this is not a correct
solution. I think the correct solution if the bzread() function is read the entire file if I dont
give the lenght parameter.
------------------------------------------------------------------------
Edit this bug report at http://bugs.php.net/?id=13860&edit=1