@lolka02

Почему так много памяти употребляет Yii2-excel с файлами формата xlsx?

Загружаю файл в формате xlsx

$file = UploadedFile::getInstance($this, 'file');
$data = Excel::import($file->tempName);

Файл весит 1мб скрипт выполняется очень долго иногда выдает ошибку о нехватки памяти

Загружаю в формате xls все ок работает, почему так, хотя данные в файлах одинаковые
  • Вопрос задан
  • 131 просмотр
Решения вопроса 1
myks92
@myks92 Куратор тега Yii
Нашёл решение — пометь вопрос ответом!
1. Откажитесь при работе с Exel данными в виде объектов - передавайте простые массивы. Это сильно сократит память, особенно если используете AR.
2. Используйте очереди и консольное приложение. Консольное приложение не имеет ограничений по памяти и длительности.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
index0h
@index0h
PHP, Golang. https://github.com/index0h
xlsx - это zip архив с кучкой всякого сложного. То, что файл 1мб - это буквально ничего не значит. Что бы разобрать этот файл на составляющие нужно довольно много памяти. Во внутрянке юзается PHPOffice/PhpSpreadsheet , каждая ячейка вашего документа - это объект, вот и считайте))

Если вам прям все критично по памяти - можете взглянуть в сторону конвертации xlsx -> csv (вот тут процессим все что нужно) -> xlsx
Ответ написан
reaferon
@reaferon
Для чтения Excel рекомендую использовать пакет (в композере "phpoffice/phpspreadsheet")
В нем кусками (например по 500 строк) читать файл, тогда проблем с памятью не будет.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы