當嘗試在Linux 主伺服器上使用SoapClient時,使用者可能會遇到錯誤訊息「SOAP-ERROR:正在解析WSDL:無法從「http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl」載入。」儘管腳本在WAMP 伺服器上正常執行,但仍會出現此問題。
要解決此問題,建議探索伺服器和 WAMP 環境之間 PHP 版本的潛在差異。較舊的 PHP 版本可能缺乏透過 SoapClient 請求發送使用者代理字串所需的功能。
如果是這種情況,明確指定使用者代理字串可以解決該問題。這可以透過使用流上下文來實現,如下所示:
try { $opts = array( 'http' => array( 'user_agent' => 'PHPSoapClient' ) ); $context = stream_context_create($opts); $wsdlUrl = 'http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl'; $soapClientOptions = array( 'stream_context' => $context, 'cache_wsdl' => WSDL_CACHE_NONE ); $client = new SoapClient($wsdlUrl, $soapClientOptions); $checkVatParameters = array( 'countryCode' => 'DK', 'vatNumber' => '47458714' ); $result = $client->checkVat($checkVatParameters); print_r($result); } catch(Exception $e) { echo $e->getMessage(); }
或者,據觀察,此問題可能是由於 HTTP over IPv6 的組合和缺少用戶代理字串而引起的在請求中。在這些條件下,涉及的 Web 服務可能會出現問題。
要確認這一點,請在Linux 主機上執行以下命令:
curl -A '' -6 http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl
如果IPv6 要求失敗,請嘗試新增使用者代理字串:
curl -A 'cURL User Agent' -6 http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl
兩個IPv4 請求都應該成功:
curl -A '' -4 http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl curl -A 'cURL User Agent' -4 http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl
如果這些觀察結果成立是的,Linux主機可能會將 URL 解析為其 IPv6 位址,且伺服器上的 SoapClient 版本預設不會附加使用者代理字串。
以上是當腳本在 WAMP 上運行時,為什麼 Linux 伺服器上會出現「SOAP-ERROR: Parsing WSDL: Couldn't Load from 'http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl'」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!