ID: 32806 Updated by: [EMAIL PROTECTED] Reported By: peoned at yahoo dot com -Status: Open +Status: Feedback Bug Type: Performance problem Operating System: Linux PHP Version: 5.0.4 New Comment:
Can you provide the perl code you used..? Also, if you have magic_quotes_runtime ini option set to off, it'll be faster. Previous Comments: ------------------------------------------------------------------------ [2005-04-23 23:11:07] peoned at yahoo dot com 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 this bug report at http://bugs.php.net/?id=32806&edit=1