ID: 13860
Updated by: jeroen
Reported By: [EMAIL PROTECTED]
Old Status: Bogus
Status: Assigned
Bug Type: Performance problem
Operating System: Windows 98 SE
PHP Version: 4.0.6
Old Assigned To: 
Assigned To: jeroen
New Comment:

Reopened, the current implementation of bzdecompress is extremely inefficient.

Assigned to myself.

Previous Comments:
------------------------------------------------------------------------

[2001-10-28 20:01:28] [EMAIL PROTECTED]

>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.

As I said in my comment I just tried what happen if I use the True parameter. I used 
the script without that parameter and it was slow...

>And you read the whole file in memory, decompress it, write it back to disk... that's 
>very inefficient.

Interesting. But I did the same in my "older" version of decompression script and it 
was fast... I dont sure why there is this differnece in the speed between the 
bzwrite() and the bzdecompress() functions. Btw I think I have a fast PC, a simple 
decompression like this should not take more than two or there secounds...

>Compressing JPG's is a quite useless practice by the way... jpg is already 
>compressed.

Of course I know jpg is already compressed... but this is a wery good way to test my 
script... If it works i can see the result immediately (the <img> at the and of the 
script). Is it satisfie you if I use pic.bmp next time? :)


------------------------------------------------------------------------

[2001-10-28 16:27:24] [EMAIL PROTECTED]

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.


------------------------------------------------------------------------

[2001-10-28 15:57:28] [EMAIL PROTECTED]

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] [EMAIL PROTECTED]

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


-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to