Что быстрее работает, чтения файла при помощи file() или fopen+цикл?

Ответы

Чтобы прочитать в массив $x файл размером 1Мб (100 000 строк по 10 байт) можно воспользоваться двумя вариантами: чтение файла с помощью file() и методом fopen/fgets.
Естественн скорость для файлов разного замера разная. Но в данном примере статистика такова: file("1Mb_file.txt") работает на 40% быстрее, чем:


$f=fopen("1Mb_file.txt","r") or die(1);
while($x[]=fgets($f,1000));
fclose($f);

и быстрее чем:

$f=fopen("1Mb_file.txt","r") or die(1);
while($s=fgets($f,1000)) $x[]=$s;
fclose($f);

и

$f=fopen("1Mb_file.txt","r") or die(1);
while(!feof($f))) $x[]=fgets($f,1000);
fclose($f);

Тот же тест, но на 15Мб файле (100 000 строк по 150 байт) показывает разницу в 50%, в пользу file(). Тест проводился так, чтобы исключить фоновый своппинг во время работы из-за предшествующих команд создания/чтения таких больших файлов. Подсчитать тоже самое на очень маленьких файлах в 1-2 Кб не представляется возможным, т.к. операцию чтения нельзя повторять в течении одного теста, операции чтения будут кешироваться...

прикольно) всегда любил file() =)