Лучший способ читать большие файлы на PHP?
Я должен читать CSV-файлы строка за строкой, которые могут составлять от 10 до 20 мегабайт. файл() бесполезен;-) и я должен найти самый быстрый способ.
Я попробовал использовать fgets(), который работает нормально, но я не знаю, читает ли он небольшой блок каждый раз, когда я его вызываю, или он кэширует больший блок и оптимизирует файловый ввод-вывод. Должен ли я попробовать способ fread(), самостоятельно анализируя EOL?
Спасибо Седрик
4 answers
Вы должны использовать fgetcsv(), если это возможно.
В противном случае всегда есть fgets().
Stream_get_line, по-видимому, более эффективен, чем fgets для больших файлов. Если вы укажете разумную максимальную длину для чтения, я не вижу причин, по которым PHP должен был бы "читать вперед", чтобы прочитать строку, как вы, кажется, беспокоитесь.
Если вы хотите использовать CSV, то fgetcsv вернет результаты в несколько более удобном формате.
Вам следует взглянуть на fgetcsv()
, он автоматически анализирует разделенную комой строку в массив.
Что касается эффективности выполнения, я понятия не имею. Вам нужно будет выполнить быстрый тест, предпочтительно с файлом того размера, который вы ожидаете обработать позже. Но я был бы удивлен, если бы fget??? а фпут??? функции не были оптимизированы для ввода-вывода.