ID: 19971
Updated by: [EMAIL PROTECTED]
Reported By: [EMAIL PROTECTED]
Status: Open
Bug Type: *Directory/Filesystem functions
Operating System: any
PHP Version: 4.3.0-dev
New Comment:
I got the following times from a tests I've run on PHP.
The test involved openning a 2.5 meg binary file 1000 times.
The results are everages of several runs.
file_get_contents() - 30.4 seconds (4.3 HEAD)
file() - 99.2 seconds (4.3 HEAD)
file() - 40.3 seconds (4.2.3)
Looks like a VERY serious performance loss to me, I'd even go as far
as to say this is a critical issue that should be resolved before
release.
For reference perpouses a simple C program that freads() entire file to
memory took only 18.5 seconds to run (1000 runs on the same file).
Previous Comments:
------------------------------------------------------------------------
[2002-10-18 07:04:36] [EMAIL PROTECTED]
fgets() is fast.
yohgaki@dev DEV]$ cat t.php
<?php
$filename = '/var/log/httpd/error_log.1';
require("Benchmark/Timer.php");
$time = new Benchmark_Timer;
$time -> setMarker('Start');
$fp = fopen($filename,'r');
for ($i = 0; $i<100; $i++)
$s = explode("\n", fread($fp, filesize($filename)));
fclose($fp);
$time -> setMarker('fread');
for ($i = 0; $i<100; $i++)
$s = file($filename);
$time -> setMarker('file');
for ($i = 0; $i<100; $i++)
$s = file_get_contents($filename);
$time -> setMarker('file_get_contents');
$fp = fopen($filename,'r');
for ($i = 0; $i<100; $i++)
$s = fgets($fp,filesize($filename));
$time -> setMarker('fgets');
fclose($fp);
[yohgaki@dev DEV]$ ./sapi/cli/php t.php
-------------------------------------------------------------------------
marker time index ex time
perct
-------------------------------------------------------------------------
Start 1034942600.41311100 -
0.00%
-------------------------------------------------------------------------
fread 1034942600.43045000 0.017338991165161
2.68%
-------------------------------------------------------------------------
file 1034942600.95939400 0.52894401550293
81.66%
-------------------------------------------------------------------------
file_get_contents 1034942601.04506900 0.085675001144409
13.23%
-------------------------------------------------------------------------
fgets 1034942601.06049200 0.015423059463501
2.38%
-------------------------------------------------------------------------
Stop 1034942601.06084500 0.00035297870635986
0.05%
-------------------------------------------------------------------------
total - 0.64773404598236
100.00%
-------------------------------------------------------------------------
[yohgaki@dev DEV]$
------------------------------------------------------------------------
[2002-10-18 06:50:52] [EMAIL PROTECTED]
Damn Mozilla wont work with buffer normally :(
Lets try again.
Problem: read from a text file into array
1. using fread()+explode()
2. using file()
Here my tests
<?php
require("Benchmark/Timer.php");
$time = new Benchmark_Timer;
$time -> setMarker('Start');
$fp = fopen("access.log", "r");
$s = explode("\n", fread($fp, filesize("access.log") ) ) ;
fclose($fp);
$time -> setMarker('fread+explode');
$s = file("access.log");
$time -> setMarker('file');
$time -> setMarker('Stop');
$time -> display();
?>
And results
---------------------------------------------------
time index ex time %
Start 1034941339.44905500 - 0.00%
fread+explode 1034941340.05736200 0.608307 34.72%
file 1034941341.20114900 1.143787 65.28%
Stop 1034941341.20128500 0.000136 0.01%
total - 1.752230 100.00%
---------------------------------------------------
Is it right?
I dont think so.
------------------------------------------------------------------------
[2002-10-18 06:25:17] [EMAIL PROTECTED]
file_get_contents() is alow slow. It's better than file(), though.
[yohgaki@dev DEV]$ cat t.php
<?php
$filename = '/var/log/httpd/error_log.1';
require("Benchmark/Timer.php");
$time = new Benchmark_Timer;
$time -> setMarker('Start');
$fp = fopen($filename,'r');
for ($i = 0; $i<100; $i++)
$s = fread($fp, filesize($filename));
fclose($fp);
$time -> setMarker('fread');
for ($i = 0; $i<100; $i++)
$s = file($filename);
$time -> setMarker('file');
for ($i = 0; $i<100; $i++)
$s = file_get_contents($filename);
$time -> setMarker('file_get_contents');
$time -> setMarker('Stop');
$time -> display();
?>
[yohgaki@dev DEV]$ ./sapi/cli/php t.php
-------------------------------------------------------------------------
marker time index ex time
perct
-------------------------------------------------------------------------
Start 1034940250.73024800 -
0.00%
-------------------------------------------------------------------------
fread 1034940250.74181700 0.011569023132324
1.86%
-------------------------------------------------------------------------
file 1034940251.26557900 0.52376198768616
84.25%
-------------------------------------------------------------------------
file_get_contents 1034940251.35169600 0.086117029190063
13.85%
-------------------------------------------------------------------------
Stop 1034940251.35192900 0.00023293495178223
0.04%
-------------------------------------------------------------------------
total - 0.62168097496033
100.00%
-------------------------------------------------------------------------
------------------------------------------------------------------------
[2002-10-18 06:16:02] [EMAIL PROTECTED]
Please also compare with fgets().
------------------------------------------------------------------------
[2002-10-18 06:13:19] [EMAIL PROTECTED]
Please paste readable output...
================================
[yohgaki@dev DEV]$ cat t.php
<?php
$filename = '/var/log/httpd/error_log.1';
require("Benchmark/Timer.php");
$time = new Benchmark_Timer;
$time -> setMarker('Start');
$fp = fopen($filename,'r');
for ($i = 0; $i<100; $i++)
$s = fread($fp, filesize($filename));
fclose($fp);
$time -> setMarker('fread');
for ($i = 0; $i<100; $i++)
$s = file($filename);
$time -> setMarker('file');
$time -> setMarker('Stop');
$time -> display();
?>
[yohgaki@dev DEV]$ ./sapi/cli/php t.php
-------------------------------------------------------------
marker time index ex time perct
-------------------------------------------------------------
Start 1034939438.53591700 - 0.00%
-------------------------------------------------------------
fread 1034939438.55064400 0.014726996421814 2.74%
-------------------------------------------------------------
file 1034939439.07360900 0.52296495437622 97.21%
-------------------------------------------------------------
Stop 1034939439.07387800 0.00026905536651611 0.05%
-------------------------------------------------------------
total - 0.53796100616455 100.00%
-------------------------------------------------------------
[yohgaki@dev DEV]$
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
http://bugs.php.net/19971
--
Edit this bug report at http://bugs.php.net/?id=19971&edit=1