2012-02-09 58 views
1

我有一個我想通過SOAP訪問的Web服務。 但我得到一個SOAP錯誤:無法在PHP中使用SOAP加載webservice,我得到SOAP-ERROR

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" 

如果我手動在瀏覽器中輸入網址http://127.0.0.1:9999/info?wsdl,那麼我可以看到生成的XML文件。

爲什麼我不能用SOAP加載它?

我與SOAP加載URL在PHP這樣的:

$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支持。

回答

2

謝謝你的回答和想法!但是我們發現了這個問題。這是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微軟Windows的時候沒有這個問題

另外,看看@ dar7yl:■鏈接:http://www.victorstanciu.ro/php-soapclient-port-bug-workaround/,如果你解決不了的問題更改SELinux並以根用戶身份運行php文件。

+0

我有完全相同的問題,這也解決了我的問題。 – 2017-06-21 19:26:31

1

我認爲問題在於PHP Soap庫無法處理WDSL版本2.您可能需要查找第三方庫。

+0

在SOAP構造我補充說: 「soap_version」=> SOAP_1_1但didn't幫助。 。:(看一看我上面的編輯 – Rox 2012-02-09 12:27:56

+0

PHP的機制的文檔說,PHP有2版本的支持:http://www.php.net/manual/en/class.soapclient.php – Rox 2012-02-09 12:45:51

+0

哦,你寫的WSDL 2.0,不是SOAP 2.0。是否可以將版本設置爲WSDL 1.0? – Rox 2012-02-09 14:18:38

2

我有這個相同的問題。基本上,當前版本的SOAP客戶端不能正確處理REMOTE wsdl's(即使遠程服務器是「localhost」)......不知道爲什麼,嘗試了很多方法來工作,但沒有。如果您下載wsdl的副本並將其保存在本地,請使用它:

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

它的工作原理類似於魅力。

如果你真的需要一個活的WSDL你的選擇是:

  • 找到的NuSOAP的舊版本,並使用它
  • 使用類似PHP curl庫拉WSDL下來並保存爲一個本地文件,然後從這個新保存的文件創建您的Soap Client對象。

祝你好運!

0

使其與SELinux強制執行一起工作。

由於默認的httpd腳本不準出連接到網絡,如果你需要的腳本能夠連接,您可以設置在httpd_can_network_connect布爾。

相關問題