SoapClient:faultcode WSDL

时间:2012-01-04 18:04:59

标签: php apache soap wsdl soap-client

当我尝试使用SoapClient时:

try {
    $client = new SoapClient('http://someurl/somefile.wsdl');
} catch (SoapFault $e) {
    var_dump($e);
}

我遇到错误:

["faultstring"] => "SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://someurl/somefile.wsdl' : failed to load external entity "http://someurl/somefile.wsdl"
["faultcode"] => "WSDL"

我可以手动下载http://someurl/somefile.wsdl并为此文件添加file_get_contents。我尝试在不同的计算机上使用它,它的工作原理。 php或apache设置可能存在问题..

ArchLinux与php和apache的最新更新。我试图启用所有的PHP扩展。

1 个答案:

答案 0 :(得分:0)

您是否可以在浏览器中使用file_get_contents()获取wsdl?

我最近在Archlinux中遇到过类似的问题,无论使用什么wsdl文件,都有相同的faulttring。在其他Archlinux机器和Windows XP盒子上,相同的代码没有任何问题。

经过一番研究后发现,只有当我尝试在浏览器中访问页面时才会出现问题 - 从命令行访问的脚本按预期工作。然后我更改了脚本以使用前面提到的file_get_contents()直接下载wsdl文件 - 它给了我一个警告"php_network_getaddresses: getaddrinfo failed: Name or service not known"

很少有教程(关于SO,或者这个:http://albertech.net/2011/05/fix-php_network_getaddresses-getaddrinfo-failed-name-or-service-not-known/)以后我还没有解决问题。但后来我发现了引入问题的原因:自安装Arch以来我一直在运行NetworkManager(为了更好地处理无线),几周之后我在rc.conf的DAEMONS部分添加了mysqld和httpd - 它似乎这打破了apache的DNS解析。

有两个解决方案(回到手动启动服务器或尝试其他网络管理员)我已经切换到wicd并且没有再次遇到问题。