В нашем приложении PHP7 (работающем на Ubuntu 16 LTS) я столкнулся с проблемой больших запросов SOAP. Наше PHP-приложение построено поверх PHP-сервера SoapServer.
Когда я пытаюсь отправить большой файл (+/- 10 МБ) в правильно закодированном сообщении SOAP, передавая его как base64binary, я получаю следующую ошибку:
«Ошибка XML в строке 2, столбец 14351283, байт 0 Нет памяти».
Все настройки PHP сервера настроены на высокие разрешения (намного выше 10 МБ), а машины имеют 32 ГБ физической ОЗУ.
Я искал в Интернете и натолкнулся на несколько похожих отчетов, связанных с libxml, требующим директивы XML_PARSE_HUGE для хорошей обработки больших запросов. Я считаю, что это причина, по которой мои запросы возвращают вышеуказанную ошибку.
Однако ... похоже, что в PHP 5.x эта проблема ДОЛЖНА быть решена уже примерно с середины 2014 года (см .: https://bugs.php.net/bug.php?id=67427).
Я не вижу глобальных настроек php.ini, чтобы заставить libxml использовать директиву XML_PARSE_HUGE, а создание исходных текстов новой библиотеки libxml на этих машинах невозможно.
Кто-нибудь знает что-нибудь / все из перечисленного?
1) Действительно ли моя проблема связана с (отсутствующей) директивой XML_PARSE_HUGE, из-за которой слишком большой запрос SOAP не может быть декодирован?
2) Если ответ на вопрос 1 «да»: кто-нибудь знает, как я могу заставить PHP SoapServer передать эту директиву XML_PARSE_HUGE?
3) Если ответ на вопрос 1 - «нет»: кто-нибудь знает, что еще может вызвать это и как его решить (кроме создания метода Soap RPC, который получает такие большие файлы кусками и объединяет их вместе)?