НАЧАЛО >> Оглавление >> Общее описание >> История изменений >> Что нового в проекте I128 >> Версия 2026.2.6 >> [I128-2726] Ошибки выполнения при служебных операциях прямого доступа к файлам ИРБИС📄 Скачать в DOCX
| Тип | Версия | Статус | Приоритет | Исполнитель |
|---|---|---|---|---|
| ⚙️ Исправление ошибок | 2026.2.6 | 🔘 Завершено |
Средний | Ilya Mikhaylenko |
Компоненты: Нет
Завершено: 31.08.2026 21:05
Проблема:
В отдельных служебных сценариях прямого доступа к файлам ИРБИС и нативного провайдера могли возникать ошибки выполнения из-за неполных вызовов функций расширения, обращения к неинициализированным значениям, деления по модулю при нулевом размере страницы или некорректной обработки результата чтения.
Решение:
Служебные операции стали устойчивее к таким ситуациям: обязательные параметры передаются явно, пустые или отсутствующие значения обрабатываются безопасно, а ошибки чтения и форматирования возвращаются без дополнительных сбоев.
Технические подробности:
Уточнены вызовы функций php_irbis64, добавлены проверки перед арифметическими операциями и обращениями к массивам, нормализованы отдельные возвращаемые значения DP_Irbis64Native, исправлена обработка указателя XRF при импорте CDS/ISIS.
I128-2726 для release/2026.2: исправляет runtime-risk предупреждения Phan в служебных операциях DP_Irbis64Direct, DP_Irbis64Native, Database и TestA. В PR нет новых UI-настроек; изменение стабилизирует вызовы extension-функций, обработку пустых/ошибочных результатов и явный выбор Direct-провайдера.
Куда смотреть:
?id=TestA/TestNative, страница сравнения DP_Irbis64Native vs DP_Irbis64Direct для БД IBIS. Chrome: подтверждено на относительном URL ?id=TestA/TestNative, после исправления страница возвращает HTTP=200 и доходит до таблицы сравнения. Было: явный SetProvider('DP_Irbis64Direct', ...) мог падать с HTTP=500 из-за неинициализированного DP_Irbis64Direct::$WorkDir. Стало: DP_Irbis64Direct лениво инициализирует контекст и пути при явном выборе провайдера.IBIS, установленное extension php_irbis64; дополнительных настроек интерфейса не требуется.Изменения по файлам:
modules/DP_Irbis64Direct/api.php
php_irbis64 и путей при явном создании provider context через GetNew().IrbisAppInit приведены к фактической сигнатуре extension с обязательным вторым аргументом.modules/DP_Irbis64Direct/__call/AdmServerRestart.inc
IrbisAppInit дополнен обязательным параметром опций.modules/DP_Irbis64Direct/__call/HandleGBL.inc
IrbisRecord дополнен явным флагом чтения.modules/DP_Irbis64Direct/__call/MakeMfnList.inc
IrbisRecord дополнен явным флагом чтения.modules/DP_Irbis64Direct/__call/Print.inc
modules/DP_Irbis64Direct/__call/RecIfUpdateAll.inc
irbistool_actualif дополнен обязательным последним параметром.modules/DP_Irbis64Direct/__call/RecReadAndFormat.inc
fmt; scalar-ошибки возвращаются без дополнительного сбоя.modules/DP_Irbis64Direct/__call/RecReadSrv.inc
IrbisRecordBack дополнен обязательным флагом проверки MFN.modules/DP_Irbis64Direct/__call/SearchMfn.inc
IrbisFreeSearch дополнен обязательными параметрами.modules/DP_Irbis64Direct/__call/SearchSrv.inc
IrbisFreeSearch дополнен обязательными параметрами.modules/DP_Irbis64Direct/__call/ServerFormat.inc
IrbisRecord дополнен явным флагом чтения.modules/DP_Irbis64Direct/__call/imagetools/image.inc
webirbis_pdf_page_png дополнен обязательным параметром опций.modules/DP_Irbis64Direct/__call/imagetools/pdfpagetoimage.php
IrbisAppInit дополнен обязательным параметром опций.modules/DP_Irbis64Direct/__call/prvGetFilePath.inc
pathinfo(..., PATHINFO_EXTENSION), чтобы не обращаться к несуществующему ключу массива.modules/DP_Irbis64Native/include/IrbisSpaceNative.php
[код ошибки, строка], совместимую с объявленной формой результата.modules/DP_Irbis64Native/include/MstSpace.php
modules/DP_Irbis64Native/include/TreeManager.php
index, как и остальные элементы дерева.modules/Database/__call/DoFLC.inc
modules/Database/__call/GetFullTextSearchCells.inc
IrbisSearchCells дополнен обязательным флагом.modules/Database/__call/ImportFromCdsIsisFolder.inc
unpack("V", ...) преобразуется в integer перед арифметикой.intdiv().modules/Database/__call/SaveAndUpdateRecord.inc
-608 выполняется только для scalar-результата, без сравнения массива с числом.modules/TestA/api.php
News защищено от отсутствующих ключей defnid и nid.Разрешение текущих конфликтов подготовлено в PR #1359 (merge/release-2026.2-to-develop-pr1358 -> develop, commit 169484ec3bf1bde29110dd8cd22cf7f5b3fae057). Обе исходные ветки защищены от прямого push; отдельный PR сохраняет направление переноса release → develop. После принятия #1359 следует повторно проверить этот PR на новые изменения релизной ветки.
Перенос всех изменений из release/2026.2, которые ещё не входят в develop.
PR создан после merge #1353: I128-2785: SocketProxy отправляет внутренние HTTPS-запросы на порт 80.
Пока этот PR открыт, последующие изменения release/2026.2 входят в него автоматически. Перед merge требуется проверить полный diff и пройти обычное review.
Перенос накопленных исправлений release/2026.2 в develop с разрешением конфликтов PR #1358.
Обе исходные ветки защищены от прямого push. Отдельная ветка содержит merge текущего release/2026.2 (e402d81e4d2a59c87254ea3bd62fbd805d6bd332) в текущий develop (df8b1a8ee2d35e0cc0c5e776d64cb71f115013e4). Новые функции develop не переносятся обратно в релизную линию. Для принятия изменений используется обычное review; PR #1358 пока остается открытым.
Разрешение конфликтов:
^, в том числе после редактирования повторений через F3. Отложенная синхронизация отменяется перед сохранением.modules/he3/tests/editor_commands_smoke.js. Существующий тест журнала статистики сохраняет путь tools/PagesStatJournalSelfTest.php.Проверки:
await Irbis.he3.testEditorCommands(). Серверное сохранение подменено; пользовательские БД не изменялись.При принятии сохранить merge-коммит и родителя release/2026.2 в истории develop (merge commit или fast-forward).
После принятия этого PR нужно повторно проверить #1358: если в release не появились новые изменения, его перенос будет полностью выполнен. Автоматизация последующих переносов release → develop не изменялась.
blocks: I128-2758 — Единое чтение результатов поиска и MFN в модуле DP_Irbis64Direct
relates to: I128-2725 — Phan: зафиксировать baseline статического анализа PHP 8.1