From:             peoned at yahoo dot com
Operating system: Linux
PHP version:      5.0.4
PHP Bug Type:     Performance problem
Bug description:  fgets() function is slow

Description:
------------
fgets() is too slow in PHP. It is a lot slower than in Perl or C, the
languages I compared it to. I read and wrote out a 20 MB file in PHP,
Perl, and C (all by line). Here are my results
C: 0.938s, 0.949s, 0.945s, 0.943s
Perl: 4.946s, 2.123s, 2.119s, 2.158s
php: 15.606s,11.637s, 11.675s, 11.260s

I ran tests on 2 computers, with fairly similar results. And another
person from a forum who I asked about fgets() ran it with approximately 6
seconds in Windows and 7 in Linux for a 15 MB file.

Replacing fgets() with fread($fin, 1024) gives these results
0.835s,0.797s,0.812s,0.836s

So the problem is with fgets(). Perl is slower than C because C is
compiled and Perl is interpreted. But there isn't a reason why php should
be that much slower than Perl. And fgets() should be slower than fread()
but not by that much.
 

Reproduce code:
---------------
    parse_p("in.txt", "out.txt");


    function parse_p($in_file, $out_file)
    {
        $fin = fopen($in_file, "rb");
        $fout = fopen($out_file, "wb");

        while(!feof($fin))
        {
            $line = fgets($fin);
            fwrite($fout, $line);
        }
        fclose($fin);
        fclose($fout);
    }

Expected result:
----------------
I expect it to be comparable to Perl or C in speed

Actual result:
--------------
It was much slower than Perl or C

-- 
Edit bug report at http://bugs.php.net/?id=32806&edit=1
-- 
Try a CVS snapshot (php4):   http://bugs.php.net/fix.php?id=32806&r=trysnapshot4
Try a CVS snapshot (php5.0): 
http://bugs.php.net/fix.php?id=32806&r=trysnapshot50
Try a CVS snapshot (php5.1): 
http://bugs.php.net/fix.php?id=32806&r=trysnapshot51
Fixed in CVS:                http://bugs.php.net/fix.php?id=32806&r=fixedcvs
Fixed in release:            http://bugs.php.net/fix.php?id=32806&r=alreadyfixed
Need backtrace:              http://bugs.php.net/fix.php?id=32806&r=needtrace
Need Reproduce Script:       http://bugs.php.net/fix.php?id=32806&r=needscript
Try newer version:           http://bugs.php.net/fix.php?id=32806&r=oldversion
Not developer issue:         http://bugs.php.net/fix.php?id=32806&r=support
Expected behavior:           http://bugs.php.net/fix.php?id=32806&r=notwrong
Not enough info:             
http://bugs.php.net/fix.php?id=32806&r=notenoughinfo
Submitted twice:             
http://bugs.php.net/fix.php?id=32806&r=submittedtwice
register_globals:            http://bugs.php.net/fix.php?id=32806&r=globals
PHP 3 support discontinued:  http://bugs.php.net/fix.php?id=32806&r=php3
Daylight Savings:            http://bugs.php.net/fix.php?id=32806&r=dst
IIS Stability:               http://bugs.php.net/fix.php?id=32806&r=isapi
Install GNU Sed:             http://bugs.php.net/fix.php?id=32806&r=gnused
Floating point limitations:  http://bugs.php.net/fix.php?id=32806&r=float
No Zend Extensions:          http://bugs.php.net/fix.php?id=32806&r=nozend
MySQL Configuration Error:   http://bugs.php.net/fix.php?id=32806&r=mysqlcfg

Reply via email to