НАЧАЛО >> Оглавление >> Общее описание >> История изменений >> Что нового в проекте I128 >> Версия 2026.3 >> [I128-2867] АРМ Подписка зависает при выводе списка заявленных изданий в Excel📄 Скачать в DOCX
| Тип | Версия | Статус | Приоритет | Исполнитель |
|---|---|---|---|---|
| ⚙️ Исправление ошибок | 2026.3 | 🔘 Завершено |
Средний | Unassigned |
Компоненты: ИРБИС 128. Модуль Periodicals - АРМ Подписка
Завершено: 14.09.2026 14:28
В АРМ Подписка при нажатии кнопки "Вывод списка заявленных изданий в ЭКСЕЛЬ" выполнение долгой операции зависает/затягивается на больших списках заявленных изданий.
GetSubDivisionRequest накапливал весь CSV в поле результата long task ($res['csv']('csv')). На больших выборках это приводило к росту сериализуемого результата задачи, лишним преобразованиям строки и риску зависания при завершении/выдаче файла.
CSV формируется построчно во временный файл в DataPath/Temp, строки сразу конвертируются в windows-1251, а результат скачивается через readfile() без накопления полного CSV в long task. Для старых результатов сохранен fallback по $res['csv']('csv').
Дополнительно значения CSV экранируются штатными кавычками, а значения, начинающиеся с =, -, +, @, защищены от CSV formula injection.
php -l modules/Periodicals/Actions/GetSubDivisionRequest.incgit diff ~~-check -~~ modules/Periodicals/Actions/GetSubDivisionRequest.inc-
I1282867 (Jira: https://jira.irbis128.ru/browse/I1282867) исправляет зависание/затягивание долгой операции в АРМ Подписка при нажатии кнопки "Вывод списка заявленных изданий в ЭКСЕЛЬ".
Куда смотреть:
GetSubDivisionRequest накапливал весь CSV в $res['csv']('csv'), то есть в сериализуемом результате long task; на больших выборках это раздувало результат и могло подвешивать завершение/выдачу файла.DataPath/Temp, строки сразу конвертируются в windows-1251, а скачивание выполняется через readfile() без накопления полного CSV в long task. Для старых результатов оставлен fallback по $res['csv']('csv').=, -, +, @ защищаются от CSV formula injection.Изменения по файлам:
modules/Periodicals/Actions/GetSubDivisionRequest.inc
AppendCsvRow() вместо накопления $res['csv']('csv').GetResult() отдает готовый временный файл потоком и удаляет его после скачивания.Проверки:
C:\i128\instances\irbis128.local\php\php.exe ~~l C:\temp\I128~~2867~~periodicals~~request-export\modules\Periodicals\Actions\GetSubDivisionRequest.inc.git diff ~~-check -~~ modules/Periodicals/Actions/GetSubDivisionRequest.inc.