2017-02-06 34 views
0

Я получаю следующее сообщение об ошибке: 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: Похоже, мой босс вводит в заблуждение меня о том, что должен был сделать

+0

Память никогда не бывает бесконечной, поэтому нет универсального решения, которое будет работать с любым размером файла csv. Есть несколько обходных путей, вы можете начать с http://stackoverflow.com/questions/17520093/read-large-data-from-csv-file-in-php – fvu

+0

Я не хочу загружать весь файл в память , Единственными переменными, которые должны сохраняться через несколько итераций цикла, должен быть относительно небольшой массив строк, соответствующих определенным критериям, и дескриптор входного файла. – ccs

+2

хорошо, я бы поставил (с очень высокими ставками), что настоящая * проблема * - это то, что вы пропустили в '// do stuff' - можем ли мы взглянуть на нее? –

ответ

0

Вы можете увеличить объем памяти за счет изменения memory_limit в php.ini код внутри цикла

0

Ну попробуйте ini_set('memory_limit', '256M');

134217728 bytes = 128 MB

+1

советую: это не * решает * проблему, а только облегчает симптомы. это будет по-прежнему терпеть неудачу для больших файлов, они просто немного больше, чем сейчас. –