1. PHP: $a=file("comments_123.txt"); 2. PHP: $t=file_get_contents("comments_123.txt"); $a=explode("\r\n", $t); 3.прочесть файл через fgets(), затем explode() 4.fread(), затем explode() 5.вместо explode() использовать preg_match_all ?
SLV, советую тебе самому проверить, что из перечисленного тобой работает быстрее, например, с помощью функции mktime. Для примера возьми файл относительно большого размера (я думаю хватит 100-200 Кб) и напиши простенький сценарий, что-то вроде: Код (Text): $sec_start = mktime(); /* ... */ $sec_end = mktime(); echo "time of processing: " . ($sec_end - $sec_start); Вместо /* ... */ последовательно вставляй код для чтения данных из файла различными способами. Затем сравни результаты.
Прошу прощения за неточность. mktime() в данном случае нежелательно использовать, т.к. она возвращает время в секундах. Лучше воспользоваться функцией microtime(). В мане есть готовый пример с ее использованием для замера времени выполнения кода. Первый вариант (чтение данных с помощью file()) оказался самым быстродействующим. Файл, объемом в 7 Мб у меня обрабатывался всего около 0.6 секунд. Тот же файл, но с использованием file_get_contents() и explode() (вариант 2) обрабатывался около 1.7 секунд. Дольше всего выполнялся код, использующий fgets(): около 3.5 секунд. Кстати, в этом случае использовать explode() нет необходимости. fread() практически полный аналог fgets().
ребят, ну что за экономия на спичках? при чтении достаточно большого файла любая из них будет работать медленно. К тому же ещё и от задачи зависит. А надо ли читать весь файл? Чисто из любви к сферическим коням. PHP: <?php $s1 = microtime(1); $t1 = file_get_contents('access.txt'); $a1=explode('\r\n', $t1); $f1 = microtime(1); $s2 = microtime(1); $handle = fopen('access.txt', 'r'); while (!feof($handle)) { $a2[] = fgets($handle, 4096); } fclose($handle); $f2 = microtime(1); $s3 = microtime(1); $size=filesize('access.txt'); $handle = fopen('access.txt', 'r'); $t3 = fread($handle, $size); $a3=explode('\r\n', $t1); fclose($handle); $f3 = microtime(1); $s4 = microtime(1); $a4=file('access.txt'); $f4 = microtime(1); ?> access.txt - стандартный лог-файл, размер — 3,13 Мб
Luge, у вас лог-файл а у меня БД ipgeo-base весом 10 мб который мало прочесть над еще найти определенную строку, так есть ли смысл оптимизировать код?
еще такая мысль можно большой файл разделить на несколько мелких, если данные отсортированы и заранее известно где искать, а потом открывать соответсвующий файл