Я получаю следующее сообщение об ошибке: Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 36 bytes)
Запуск из памяти с fgetcsv на большой файл
линия, что она терпит неудачу на это while (($dataInputRecord = fgetcsv($inputFile, $maxRowLength, ",")) !== FALSE)
из этого блока кода:
if (($inputFile = fopen($fileName, "r")) !== FALSE) {
while (($dataInputRecord = fgetcsv($inputFile, $maxRowLength, ",")) !== FALSE) {
// do stuff
}
fclose($inputFile);
}
всего файл - 32 МБ. Игра с размером $maxRowLength
не помогла. Я убежден, что проблема заключается в размере файла, потому что усечение его до 8 КБ решает проблему. Как я могу заставить его не заботиться о размере файла?
Edit: Похоже, мой босс вводит в заблуждение меня о том, что должен был сделать
Память никогда не бывает бесконечной, поэтому нет универсального решения, которое будет работать с любым размером файла csv. Есть несколько обходных путей, вы можете начать с http://stackoverflow.com/questions/17520093/read-large-data-from-csv-file-in-php – fvu
Я не хочу загружать весь файл в память , Единственными переменными, которые должны сохраняться через несколько итераций цикла, должен быть относительно небольшой массив строк, соответствующих определенным критериям, и дескриптор входного файла. – ccs
хорошо, я бы поставил (с очень высокими ставками), что настоящая * проблема * - это то, что вы пропустили в '// do stuff' - можем ли мы взглянуть на нее? –