Лучший способ прочитать большие файлы в PHP? - PullRequest
2 голосов
/ 05 ноября 2008

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

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

Спасибо Cedric

Ответы [ 4 ]

7 голосов
/ 05 ноября 2008

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

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

2 голосов
/ 05 ноября 2008

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

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

1 голос
/ 05 ноября 2008

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

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

0 голосов
/ 05 ноября 2008

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

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

...