您的位置:首页 > 编程语言 > PHP开发

PHP调用wsdl接口实例化SoapClient抛出异常

2017-04-18 11:24 736 查看
异常:Message:SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://*****?wsdl' : failed to load external entity "http://****?wsdl"。

本地调用接口正常,放到服务器上以后,出现了500错误。try{}cache(){}:

try{
$client=new SoapClient($wsdl);
}catch(Exception $e){
echo 'Message:'.$e->getMessage();
}
抛出异常:Message:SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://*****?wsdl' : failed to load external entity "http://****?wsdl"。
首先确认,服务器PHP环境配置和本地一样。也百度了很多解决办法,都没起作用,请教了接口的开发者.NET 工程师。发给一张截图:



解决办法:$client=new SoapClient($wsdl);这句代码前添加libxml_disable_entity_loader(false); 问题就这样解决了。
查libxml_disable_entity_loader()作用: Disable the ability to load external entities(禁用加载外部实体的能力)。
SoapClient在我的代码里面确实是外部的实体,我不禁用加载外部实体的能力,就可以实例化SoapClient。问题也就自然而然的解决了。
PHP调用Web services接口实例:

$url='http://****?wsdl';

$client = new SoapClient($url);
$param = array("param1"=>$param1,"param2"=>$param2);

方法1:
$p = $client->__soapCall('functionname',array("parameters"=>$param));
$arr= json_decode($p->functionnameResult,true);

方法2:

$ret2 = $client->functionname($param);
$actjson=$ret2->functionnameResult;
$arr=json_decode($actjson,true);

return $arr;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐