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

StackOverflow https://stackoverflow.com/questions/265102

  •  06-07-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

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

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

Другие советы

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top