一部の PHP バージョンで SOAP クライアントが WSDL のロードに失敗するのはなぜですか?

Barbara Streisand
リリース: 2024-11-08 19:59:02
オリジナル
943 人が閲覧しました

Why Does My SOAP Client Fail to Load a WSDL on Some PHP Versions?

SOAP-ERROR: 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート