Лучший способ читать большие файлы в PHP?
-
06-07-2019 - |
Вопрос
Мне нужно читать файлы CSV построчно, размер которых может составлять от 10 до 20 МБ.file() бесполезен ;-) и мне нужно найти самый быстрый способ.
Я попробовал использовать fgets(), который работает нормально, но я не знаю, читает ли он небольшой блок каждый раз, когда я его вызываю, или кэширует больший блок и оптимизирует ввод-вывод файлов.Должен ли я попробовать метод fread(), анализируя EOL самостоятельно?
Спасибо, Седрик
Решение
Вы должны использовать fgetcsv() если возможно.
В противном случае всегда существует fgets().
Другие советы
stream_get_line, по-видимому, более эффективен, чем fgets, для больших файлов.Если вы укажете разумную максимальную длину для чтения, я не вижу причин, по которым PHP должен был бы «читать вперед», чтобы прочитать строку, о чем вы, похоже, беспокоитесь.
Если вы хотите использовать CSV, fgetcsv вернет результаты в несколько более разумном формате.
Вам следует взглянуть на fgetcsv()
, он автоматически преобразует строку, разделенную запятыми, в массив.
Что касается эффективности выполнения, я понятия не имею.Вам придется провести быстрый тест, желательно с файлом того размера, с которым вы собираетесь работать позже.Но я бы удивился, если бы фиг???и фупут???функции не были оптимизированы для ввода-вывода.