Когда я запускаю этот метод в первый раз, он работает нормально, но во второй раз я получаю следующие предупреждения и ошибки:
Предупреждение: SoapClient :: __ call (): сбой выделения памяти: растущий буфер
Неустранимая ошибка: исключение Uncaught SoapFault: [Отправитель] выглядит так, как будто у нас нет XML-документа
Когда я "обеспечиваю", он снова работает нормально один раз.
ini_set('memory_limit','1024M');
ini_set('soap.wsdl_cache_enabled', 0);
ini_set('soap.wsdl_cache_ttl', 0);
$xmlQuery = '<Query>
<Select languages="'.$language.'">
<Feature id="*"/>
</Select>
<From id="Product"/>
<Where>
<Clause id="AppType" operator="!=" value="" />
<Clause id="MainGroup" operator="!=" value="" />
</Where>
</Query>';
$request = 'http://localhost:8080/Products/getdata.asmx?wsdl';
$options = [
'uri'=>'http://schemas.xmlsoap.org/soap/envelope/',
'soap_version'=>SOAP_1_2,
'cache_wsdl'=>WSDL_CACHE_NONE,
'connection_timeout'=>15,
'encoding'=>'UTF-8',
'exceptions'=>true,
];
$soap = new \SoapClient($request, $options);
$res = $soap->ExecuteQuery(['query' => $xmlQuery]);
$re = new \SimpleXMLElement($res->ExecuteQueryResult);
Я думал, что очистил кеш с помощью WSDL-кешей, но, похоже, он не справляется с этой задачей.
Может кто-нибудь объяснить, что здесь происходит, и исправить эту проблему?
Возможно, есть способ разделить этот запрос и сделать это «по кусочкам»?
По запросу я получаю около 30 000 товаров.
Это неправильно использовать $ soap-> ExecuteQuery? Не могу найти много информации об этом.