ホームページ >バックエンド開発 >PHPチュートリアル >一部の PHP バージョンで SOAP クライアントが WSDL のロードに失敗するのはなぜですか?
この場合、ユーザーは、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 サイトの他の関連記事を参照してください。