Pada pelayan induk Linux, SoapClient tidak dapat menghuraikan WSDL daripada URL yang diberikan, mengakibatkan ralat: "SOAP-ERROR: Parsing WSDL: Tidak dapat memuatkan dari - tetapi berfungsi pada WAMP". Walau bagaimanapun, memanggil URL secara terus atau menggunakan curl daripada baris arahan mengembalikan respons XML yang dijangkakan.
Rentetan Ejen Pengguna Hilang:
Untuk versi PHP tertentu, SoapClient tidak boleh menghantar maklumat ejen pengguna HTTP secara lalai. Ini boleh menyebabkan masalah dengan perkhidmatan web yang digunakan.
Penyelesaian:
Tetapkan ejen pengguna secara eksplisit menggunakan strim konteks:
$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);
Isu Perkhidmatan Web:
Selain itu, didapati bahawa perkhidmatan web dalam soalan mempunyai masalah dengan permintaan IPv6 tanpa rentetan ejen pengguna. Untuk mengesahkan ini, cuba perintah berikut pada hos Linux:
curl -A '' -6 http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl curl -A 'cURL User Agent' -6 http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl 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
Permintaan IPv6 tanpa ejen pengguna akan gagal, manakala semua permintaan lain akan berjaya. Ini menunjukkan bahawa hos Linux sedang menyelesaikan domain perkhidmatan web ke alamat IPv6nya dan SoapClient tidak menambah rentetan ejen pengguna secara lalai.
Atas ialah kandungan terperinci Mengapa Klien Soap Saya Gagal Menghuraikan WSDL pada Linux Tetapi Berfungsi pada WAMP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!