ホームページ > バックエンド開発 > PHPチュートリアル > スクリプトが WAMP で動作するときに Linux サーバーで「SOAP-ERROR: Parsing WSDL: Couldn't Load from 'http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl'」が発生するのはなぜですか?

スクリプトが WAMP で動作するときに Linux サーバーで「SOAP-ERROR: Parsing WSDL: Couldn't Load from 'http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl'」が発生するのはなぜですか?

Susan Sarandon
リリース: 2024-11-13 12:46:02
オリジナル
498 人が閲覧しました

Why does

SOAP-ERROR: WSDL を解析中: "http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl" からロードできませんでした

上で SoapClient を使用しようとしたときLinux マスターサーバーでは、「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();
}
ログイン後にコピー

また、この問題は、IPv6 経由の HTTP とユーザー エージェント文字列の欠如の組み合わせによって発生する可能性があることが確認されています。リクエストの中で。関連する 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 中国語 Web サイトの他の関連記事を参照してください。

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