Dalam kes ini, pengguna menghadapi ralat SOAP semasa cuba menggunakan WSDL daripada perkhidmatan web. Ralat secara khusus menyatakan bahawa klien SOAP tidak dapat memuatkan WSDL daripada URL yang disediakan.
Kunci untuk menyelesaikan isu ini terletak pada tingkah laku klien SOAP yang berbeza pada pelbagai versi PHP. Sesetengah versi PHP mengetepikan penghantaran maklumat ejen pengguna HTTP, yang membawa kepada masalah apabila cuba mengakses perkhidmatan web.
Berikut ialah penyelesaian untuk menetapkan ejen pengguna secara eksplisit menggunakan strim konteks:
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(); }
Perlu diperhatikan bahawa isu itu juga boleh dikaitkan dengan masalah dengan perkhidmatan web itu sendiri. Dengan menguji URL menggunakan curl dengan dan tanpa ejen pengguna, didapati bahawa permintaan IPv6 tanpa rentetan ejen pengguna gagal manakala permintaan IPv4 dengan atau tanpa rentetan ejen pengguna berjaya.
Pemerhatian ini mencadangkan isu keserasian antara perkhidmatan web dan konfigurasi khusus hos Linux pengguna.
Atas ialah kandungan terperinci Mengapa Klien SOAP Saya Gagal Memuatkan WSDL pada Beberapa Versi PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!