Heim >Backend-Entwicklung >PHP-Tutorial >Warum tritt „SOAP-ERROR: Parsing WSDL: Couldn't Load from ‚http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl'' auf einem Linux-Server auf, wenn das Skript unter WAMP funktioniert?

Warum tritt „SOAP-ERROR: Parsing WSDL: Couldn't Load from ‚http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl'' auf einem Linux-Server auf, wenn das Skript unter WAMP funktioniert?

Susan Sarandon
Susan SarandonOriginal
2024-11-13 12:46:02515Durchsuche

Why does

SOAP-ERROR: Parsing WSDL: Konnte nicht von „http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl“ geladen werden

Beim Versuch, einen SoapClient auf einem Linux-Masterserver zu verwenden, kann es sein, dass Benutzer auf die Fehlermeldung „SOAP-ERROR: Parsing WSDL: Couldn't Load from 'http://ec.europa.eu/“ stoßen. taxation_customs/vies/checkVatService.wsdl'." Dieses Problem tritt auf, obwohl das Skript auf einem WAMP-Server ordnungsgemäß funktioniert.

Um dieses Problem zu beheben, wird empfohlen, mögliche Unterschiede in den PHP-Versionen zwischen dem Server und der WAMP-Umgebung zu untersuchen. Ältere PHP-Versionen verfügen möglicherweise nicht über die erforderliche Funktionalität, um eine User-Agent-Zeichenfolge mit SoapClient-Anfragen zu senden.

Wenn dies der Fall ist, kann das Problem durch die explizite Angabe einer User-Agent-Zeichenfolge behoben werden. Dies kann durch die Verwendung eines Stream-Kontexts erreicht werden, wie unten dargestellt:

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();
}

Alternativ wurde beobachtet, dass dieses Problem aufgrund einer Kombination aus HTTP über IPv6 und dem Fehlen einer Benutzeragentenzeichenfolge auftreten kann in der Anfrage. Der betroffene Webdienst kann unter diesen Bedingungen Probleme aufweisen.

Um dies zu bestätigen, führen Sie die folgenden Befehle auf dem Linux-Host aus:

curl -A '' -6 http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl

Wenn die IPv6-Anfrage fehlschlägt, versuchen Sie, einen Benutzeragenten hinzuzufügen string:

curl -A 'cURL User Agent' -6 http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl

Beide IPv4-Anfragen sollten erfolgreich sein:

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

Wenn diese Beobachtungen zutreffen, ist es wahrscheinlich, dass der Linux-Host die URL in seine IPv6-Adresse und den SoapClient auflöst Die Version auf dem Server hängt standardmäßig keine Benutzeragentenzeichenfolge an.

Das obige ist der detaillierte Inhalt vonWarum tritt „SOAP-ERROR: Parsing WSDL: Couldn't Load from ‚http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl'' auf einem Linux-Server auf, wenn das Skript unter WAMP funktioniert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn