Лучший способ читать большие файлы на PHP?


Я должен читать CSV-файлы строка за строкой, которые могут составлять от 10 до 20 мегабайт. файл() бесполезен;-) и я должен найти самый быстрый способ.

Я попробовал использовать fgets(), который работает нормально, но я не знаю, читает ли он небольшой блок каждый раз, когда я его вызываю, или он кэширует больший блок и оптимизирует файловый ввод-вывод. Должен ли я попробовать способ fread(), самостоятельно анализируя EOL?

Спасибо Седрик

Author: Jon Seigel, 2008-11-05

4 answers

Вы должны использовать fgetcsv(), если это возможно.

В противном случае всегда есть fgets().

 7
Author: gnud, 2008-11-05 13:23:16

Stream_get_line, по-видимому, более эффективен, чем fgets для больших файлов. Если вы укажете разумную максимальную длину для чтения, я не вижу причин, по которым PHP должен был бы "читать вперед", чтобы прочитать строку, как вы, кажется, беспокоитесь.

Если вы хотите использовать CSV, то fgetcsv вернет результаты в несколько более удобном формате.

 2
Author: Ciaran McNulty, 2008-11-05 15:10:59

fgets() должно быть идеально подходит для ваших нужд. Даже file() должно быть в порядке - 20 мб не очень много, если вы не делаете это много раз одновременно.

Не забывайте, что вы можете настроить fgets() с его вторым параметром.

 1
Author: Greg, 2008-11-05 13:21:27

Вам следует взглянуть на fgetcsv(), он автоматически анализирует разделенную комой строку в массив.

Что касается эффективности выполнения, я понятия не имею. Вам нужно будет выполнить быстрый тест, предпочтительно с файлом того размера, который вы ожидаете обработать позже. Но я был бы удивлен, если бы fget??? а фпут??? функции не были оптимизированы для ввода-вывода.

 0
Author: Treb, 2008-11-06 17:37:30