Я пытаюсь загрузить лист Excel в laravel с помощью пакета laravel excel. Проблема, с которой я столкнулся, заключается в том, что даже после выполнения их инструкций, когда я пытаюсь загрузить свой лист Excel, он продолжает загружаться и загружаться. В файле журнала laravel говорится, что
local.ERROR: Out of memory (allocated 1598029824) (tried to allocate 469762048 bytes) {"exception":"[object] (Symfony\\Component\\Debug\\Exception\\FatalErrorException(code: 1)
Размер файла только 70kb, а на моем php.ini я выделил память 8gb.
Код, который я использую для чтения файла Excel, приведен ниже.
if ($request->hasFile('excelSheet')){
$path= $request->file('excelSheet')->getRealPath();
$data = \Excel::selectSheetsByIndex(0)->load($path)->get();
echo'<pre>';
print_r($data);
}
Лист Excel, который я пытаюсь загрузить, состоит из нескольких листов, снимок экрана которых прилагается к вопросу.
Кто-нибудь может сказать мне, как я могу получить эти данные или как я могу решить проблему с выделением памяти?

1598029824! == 8 ГБ
Но размер файла электронной таблицы не указывает на ее требования к памяти; количество ячеек (на всех листах, которые вы загружаете) гораздо более значимо
PS: phpExcel был заменен на phpSpreadsheet. Я думаю, что это тот же парень, так что можно предположить, что он сделал phpSpreadsheet больше, лучше и прекраснее.
Вы пытались обойтись без пакета Excel? только с $csv = file($request->file('excel'));?
Если вы пытаетесь только прочитать данные из файла или записать данные в новый файл, вы можете вместо этого попробовать пакет Spout от Box. Вы не получите тех удобных манипуляций с файлами, которые вы делаете с phpSpreadsheet, но он намного легче для объема оперативной памяти: opensource.box.com/spout/getting-started
Вы используете php-fpm? Если да, попробуйте перезапустить это. Также проверьте max_post_size в php.ini.
@RiggsFolly: да, изменения были зафиксированы и приняты php. Я пробовал использовать другой файл в ядре php размером 1,2 ГБ, который работал отлично, и мне очень жаль. я не понимаю, что означает ваш второй комментарий
@MarkBaker да, 1598029824! == 8GB может быть правильным, но для размера файла 70kb не должно потребоваться столько памяти. Я внес эти изменения, чтобы загрузить файл размером 3 ГБ, который находится в основном php ofrcourse. это первая попытка в laravel, «размер файла электронной таблицы не указывает на ее требования к памяти», да, возможно, вы правы в этом. Но у этого около 30 ячеек в каждой строке. поэтому ему не нужно столько памяти, я предполагаю, что он идет в цикле или что-то в этом роде
@btl да, мой max_post_size тоже 8gb,
30 ячеек в каждой строке? Сколько рядов? Одинаково ли это на всех трех листах? Собираетесь в петлю? Возможно, но маловероятно ... но я немедленно исследую возможность того, что в 250 тыс. Строк кода, составляющих PHPExcel, может быть ошибка, которая может поместить код в цикл, когда что-то, что может быть в каком-то файле электронной таблицы, срабатывает. Это
@MarkBaker да около 30 ячеек в строке, и сейчас у меня только 13 строк на листе 1, я получаю данные только с листа 1, оставшийся лист мне не нужен. Они предназначены только для проверки поля листа Excel






Тогда я бы предположил, что PHP не уловил ваше изменение на 8 ГБ, поскольку ему не удалось выделить немного больше 1,5 ГБ. Вы уверены, что изменили правильный файл
php.iniИ перезапустили свой веб-сервер