【发布时间】:2018-05-08 12:30:38
【问题描述】:
当我第一次运行此方法时,它工作正常,但第二次,我收到以下警告和错误:
警告:SoapClient::__call():内存分配失败:缓冲区增长
致命错误:未捕获的 SoapFault 异常:[Sender] 看起来我们没有 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有错吗?似乎找不到太多关于它的信息。
【问题讨论】:
-
什么 PHP 版本和memory_limit 大小?
-
PHP 版本 7.2,memory_limit 大小为 1024M。之前有512M,不过只是改成1024M来测试。还是一样.. @camelsWriteInCamelCase
-
我尝试使用 unset($res),但也没有工作
标签: php soap localhost simplexml soap-client