>백엔드 개발 >PHP 튜토리얼 >스크립트가 WAMP에서 작동할 때 'SOAP-ERROR: WSDL 구문 분석: 'http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl'에서 로드할 수 없습니다.'가 Linux 서버에서 발생하는 이유는 무엇입니까?

스크립트가 WAMP에서 작동할 때 'SOAP-ERROR: WSDL 구문 분석: 'http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl'에서 로드할 수 없습니다.'가 Linux 서버에서 발생하는 이유는 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-13 12:46:02515검색

Why does

SOAP-ERROR: WSDL 구문 분석: "http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl"

Linux 마스터 서버에서 SoapClient를 사용하려고 하면 사용자에게 "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의 조합과 사용자 에이전트 문자열의 부재로 인해 발생할 수 있는 것으로 관찰되었습니다. 요청에. 관련 웹 서비스는 이러한 조건에서 문제를 나타낼 수 있습니다.

이를 확인하려면 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 호스트가 IPv6 주소 및 SoapClient에 대한 URL을 확인하고 있을 가능성이 높습니다. 서버의 버전은 기본적으로 사용자 에이전트 문자열을 추가하지 않습니다.

위 내용은 스크립트가 WAMP에서 작동할 때 'SOAP-ERROR: WSDL 구문 분석: 'http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl'에서 로드할 수 없습니다.'가 Linux 서버에서 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.