Столкнувшись с проблемой в Excel листе и CSV-ридер с большим количеством записей в Codeignitor.

A PHP Error was encountered
Severity: Warning
Message: simplexml_load_string(): Memory allocation failed : growing buffer
Filename: Reader/Excel2007.php
Line Number: 645
Backtrace:
File: \application\third_party\PHPExcel\Reader\Excel2007.php
Line: 645
Function: simplexml_load_string
File: \application\controllers\admin\Csv.php
Line: 56
Function: load
File: \index.php
Line: 322
Function: require_once
0
Rajan Singh 26 Ноя 2019 в 17:06
1
Даже если сообщение об ошибке было четко отформатировано (вставьте строку > ``` перед и после): кто будет угадывать причину без показа исходного кода?
 – 
greybeard
26 Ноя 2019 в 17:24

2 ответа

Первый вариант - увеличить память для php настройкой в ​​файле php.ini.

memory_limit = 256M

Число может быть меньше и отличаться, но должно быть как минимум выше, чем сейчас, но, безусловно, может быть и выше 256M. После изменения, возможно, придется перезапустить сервер (зависит от некоторых вещей).

Если это не поможет, то стоит посмотреть приложение и даже CSV-файл.
Основная проблема большинства фреймворков заключается в том, что данные собираются, хранятся в памяти, анализируются, а затем результаты отображаются или записываются в базу данных, если они применяются.
Программы для больших данных должны каким-то образом разбивать данные на части, что также может означать простую оптимизацию и пошаговую обработку (например, видео или звуковой файл). Поскольку XML не является потоковым форматом, но требует полностью проанализированной структуры перед обработкой, обычно подсказка может выглядеть немного бесполезной. Но, возможно, есть несколько вещей, которые вы могли бы сделать, чтобы уменьшить объем данных, которые нужно обрабатывать сразу:

  • Если simplexml используется для обработки нескольких файлов одновременно, будет легко просто уменьшить количество файлов.
  • если XML - файл (ы) слишком велик, вы должны создавать файлы меньшего размера. Также возможно разделение файлов, но для этого требуется немного знаний о XML.

В общем, возможно, что небольшие изменения в реализации в CodeIgniter уже могут решить проблему, но, поскольку она здесь неизвестна, мы можем только догадываться о ней.

0
David 26 Ноя 2019 в 19:23

Чтобы увеличить ограничение памяти PHP, отредактируйте файл PHP.ini. Просто увеличьте значение по умолчанию (пример: максимальный объем памяти, который скрипт может использовать = 128 МБ) строки ограничения памяти PHP в php.ini.

memory_limit = 256M

Или вы можете отредактировать ваш файл .htaccess.

php_value memory_limit 256M

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

0
smita 28 Ноя 2019 в 12:47