この場合、ユーザーは、WSDL を使用しようとしているときに SOAP エラーが発生します。ウェブサービス。このエラーは、SOAP クライアントが指定された URL から WSDL をロードできないことを具体的に示しています。
この問題を解決する鍵は、さまざまな PHP バージョンでの SOAP クライアントの動作の違いにあります。 PHP の一部のバージョンでは HTTP ユーザー エージェント情報の送信が省略され、Web サービスにアクセスしようとすると問題が発生します。
コンテキスト ストリームを使用してユーザー エージェントを明示的に設定する解決策は次のとおりです。
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(); }
この問題は、Web サービス自体の問題に起因する可能性もあることは注目に値します。ユーザー エージェントの有無にかかわらず、curl を使用して URL をテストすると、ユーザー エージェント文字列の有無にかかわらず IPv4 リクエストは成功するのに対し、ユーザー エージェント文字列のない IPv6 リクエストは失敗することがわかりました。
この観察は、次のような互換性の問題を示唆しています。 Web サービスとユーザーの Linux ホストの特定の構成。
以上が一部の PHP バージョンで SOAP クライアントが WSDL のロードに失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。