У меня была такая же проблема. Вам нужно будет выделить достаточно времени и памяти.
Я проверил свое решение на 3 разных серверах, вот результат:
Около 5000 записей (12 столбцов)
Чтение файла:
09:48:22 Пиковое использование памяти: 1,25 МБ
Чтение данных:
09:48:31 Пиковое использование памяти: 54,5 МБ
После индексации данных в массиве:
09:48:35 Пиковое использование памяти: 68,5 МБ
записей: 4504
Я увеличил память и время для чтения 22 000 записей, после индексации он достиг 370,00 МБ
Вот решение (учитывая, что все остальное правильно в последовательности кода)
где вы вызываете PHPExcel в вашей программе / функции:
ini_set("max_execution_time", 'time_limit'); //see manual
Выполните здесь всю инициализацию, чтобы все объекты были готовы, затем выделите память для чтения файла и индексации данных во внутренней структуре программы:
ini_set('memory_limit', '???'); //your memory limit as string
$excel = $excelReader->load($filePath);
"Memory usage: " . (memory_get_peak_usage(true) / 1024 / 1024) . " MB"
//do the rest of the structure!
Хорошая идея состоит в том, чтобы управлять всем этим с помощью некоторых категорий данных, чтобы вы не столкнулись с 400 МБ.