2012-01-04 66 views
0

當我嘗試使用SoapClient的:SoapClient的:Fault代碼WSDL

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

我有catch錯誤:

["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擴展。

+0

WDSL文件的版本是什麼? SoapClient僅支持1.1和1.2。如果WSDL用於版本2,則無法通過SoapClient使用它。 – 2012-01-04 18:20:34

回答

0

您是否可以在瀏覽器中使用file_get_contents()獲取wsdl?

我最近在Archlinux中遇到了類似的問題,使用相同的故障字符串,無論使用什麼wsdl文件。相同的代碼在其他Archlinux機器和Windows XP機器上運行時沒有任何問題。

經過一番研究後,問題纔出現,當我試圖訪問瀏覽器中的頁面時 - 從命令行訪問的腳本按預期工作。然後我改變腳本直接下載wsdl文件,使用前面提到的file_get_contents() - 它給了我一個警告"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中將mysqld和httpd添加爲DAEMONS部分 - 看起來這是打破了Apache的DNS解析。

有兩個解決方案(手動返回到啓動服務器或嘗試其他網絡管理器)我已切換到wicd並沒有再次遇到問題。