1. Откажитесь при работе с Exel данными в виде объектов - передавайте простые массивы. Это сильно сократит память, особенно если используете AR.
2. Используйте очереди и консольное приложение. Консольное приложение не имеет ограничений по памяти и длительности.
xlsx - это zip архив с кучкой всякого сложного. То, что файл 1мб - это буквально ничего не значит. Что бы разобрать этот файл на составляющие нужно довольно много памяти. Во внутрянке юзается PHPOffice/PhpSpreadsheet , каждая ячейка вашего документа - это объект, вот и считайте))
Если вам прям все критично по памяти - можете взглянуть в сторону конвертации xlsx -> csv (вот тут процессим все что нужно) -> xlsx
по мне fgetcsv уже тормоз (пустой цикл по 150К строк > 7 секунд), а Вы спрашиваете почему так много памяти
и медленно работает класс, который в 1000 раз умнее.
lolka02, у вас стальные яйца. Если я правильно понимаю oom killer киляет процесс. Можете его натюнить заодно с ini_set("memory_limit", "-1");, и готовиться к падениям сервера.
А если по делу, проведите профилирование (https://tideways.com/profiler/xhprof-for-php7 ) на документе, с которым вы падаете, вероятнее всего вы упретесь в PHPOffice/PhpSpreadsheet. Если это так - проведите рисерч по этой библиотеке, может что-то можно ускорить самостоятельно и issue на github напилите.
Так же поищите аналоги этой библиотеки, может они жрут по меньше.
Если весь рисерч будет неудачным - поздравляю, вы уперлись в пределы php реализаций работы с xlsx. Либо меняйте язык, либо пытайтесь подключить реализацию работы с xlsx на другом языке.
Для чтения Excel рекомендую использовать пакет (в композере "phpoffice/phpspreadsheet")
В нем кусками (например по 500 строк) читать файл, тогда проблем с памятью не будет.