无法在PHP中使用SOAP加载Web服务,我收到SOAP-ERROR


Can not load webservice with SOAP in PHP, I get SOAP-ERROR

我有一个想通过 SOAP 访问的 Web 服务。但是我收到一个肥皂错误:

Exception caught: SOAP-ERROR: Parsing WSDL: Couldn´t load from 'http://127.0.0.1:9999/info?wsdl' : failed to load external entity "http://127.0.0.1:9999/info?wsdl"

如果我在浏览器中手动输入 URL http://127.0.0.1:9999/info?wsdl,那么我可以看到生成的 xml 文件。

为什么我不能用 SOAP 加载它?

我在 PHP 中使用 SOAP 加载 URL,如下所示:

$soap = new SoapClient("http://127.0.0.1:9999/info?wsdl", array("trace" => TRUE((;

我错过了什么?

编辑
将 SOAP 版本设置为 1.1 不会使其正常工作:

$soap = new SoapClient("http://127.0.0.1:9999/info?wsdl", array("trace" => TRUE, "soap_version" => SOAP_1_1));

编辑 2:
我已经让它在Windows和Ubuntu上运行,但在CentOS 6上没有。是不是 CentOS 6 让 PHP:s SoapClient 无法正常工作?我在 CentOS 6 机器上运行的 PHP 版本是 5.3.3,当然在 PHP 中启用了 Soap 支持。

我也有同样的问题。 基本上,当前版本的 SOAP 客户端不能正确处理远程 wsdl(即使远程服务器是"本地主机"(。不知道为什么,尝试了很多方法开始工作,就是没有。 如果您下载 wsdl 的副本并将其保存在本地,则可以像这样使用它:

$soap = new SoapClient("/path/to/local/file.wsdl");

它就像一个魅力。

如果您确实需要一个实时 wsdl,您的选择是:

  • 查找旧版本的NuSoap并使用它
  • 使用 php curl 库之类的东西将 wsdl 下拉并另存为本地文件,然后从这个新保存的文件创建 Soap 客户端对象。

祝你好运!

感谢您的回答和想法!但我们已经发现了问题所在。SELinux 中的东西必须被禁用(您可以编辑/etc/sysconfig/selinux并编辑行SELINUX=enforcingSELINUX=permissive(或SELINUX=disabled禁用 SELinux(。
另外,在我们的例子中,我们必须以根用户身份运行连接到WSDL的php文件(chown root /path/to/phpfile/on/webserver/file.php.

我们只有在使用 CentOS 6 时才遇到这个问题, 不是在使用 Ubuntu och MS Windows 时。
另外,请查看 @dar7yl:s 链接:http://www.victorstanciu.ro/php-soapclient-port-bug-workaround/如果您无法解决 SELinux 中的更改并以 root 身份运行 php 文件的问题。

我认为问题是 PHP Soap 库无法处理 WDSL 版本 2。 您可能需要寻找第三方库。

使其与 SELinux 强制一起使用。

由于默认情况下不允许 httpd 脚本连接到网络,因此如果您需要脚本能够连接,则可以设置布尔值httpd_can_network_connect。