contoh klien sabun php. Menulis aplikasi client-server SOAP di PHP
Saya perlu terhubung ke satu layanan web dan hanya ini yang saya miliki:
Contoh panggilan:
Saya tahu fungsi ini mengembalikan string;
Inilah yang telah saya lakukan sejauh ini:
Membuat Referensi Layanan hanya menambahkan alamat WSDL yang ditentukan dalam poin 1.
Membuat instance layanan web dan memanggil fungsi dengan semua parameter yang diperlukan tetapi tidak ada pengguna dan kata sandi untuk header.
Bagaimana saya bisa melanjutkan? Terima kasih sebelumnya.
1 jawaban
Ini mungkin tempat yang baik untuk memulai jika Anda perlu menambahkan kredensial Anda; saya pikir Anda mungkin harus melakukannya karena Anda mendapatkannya entah bagaimana. Bagian di mana Anda menambahkan kredensial Anda tercantum di bawah ini:
UsernameToken userToken = new UsernameToken(namapengguna, kata sandi, PasswordOption.SendHashed); Service1 serviceProxy = baru Service1(); SoapContext requestContext = serviceProxy.RequestSoapContext; requestContext.Security.Tokens.Add(userToken);
- Tambahkan kredensial Anda dengan memasukkannya ke dalam token tertentu - jenis yang termasuk dalam namespace Microsoft.Web.Services2.Security.Tokens
- Buat proxy untuk layanan Anda (dalam contoh di atas, serviceProxy)
- Akses header permintaan Anda melalui layanan RequestSoapContext Anda
- Tambahkan token ke permintaan
Juga, saya pikir Anda dapat melewati bagian "?wsdl" dari alamat karena mengacu pada spesifikasi layanan web. Setelah selesai, Anda dapat mencoba memanggil fungsi dan melihat bagaimana semuanya berjalan: jika fungsi harus mengembalikan sesuatu, periksa apa yang Anda harapkan.
Saya terbiasa menulis kode PHP, tetapi tidak banyak menggunakan pengkodean berorientasi objek. Sekarang saya perlu berinteraksi dengan SOAP (sebagai klien) dan sepertinya saya tidak bisa mendapatkan sintaks yang benar. Saya memiliki file WSDL yang memungkinkan saya mengatur koneksi baru dengan benar menggunakan kelas SoapClient. Namun, saya tidak dapat melakukan panggilan yang benar dan mendapatkan data kembali. Saya perlu mengirim data berikut (yang disederhanakan):
- ID kontak
- nama Kontak
- gambaran umum
- Jumlah
Ada dua fungsi dalam dokumen WSDL, tetapi saya hanya membutuhkan satu ("Fungsi Pertama" di bawah). Berikut adalah skrip yang saya jalankan untuk mendapatkan informasi tentang fungsi dan tipe yang tersedia:
$klien = new SoapClient("http://example.com/webservices?wsdl"); var_dump($klien->__getFunctions()); var_dump($klien->__getTypes());
Dan inilah output yang dihasilkannya:
Array( => "Fungsi Fungsi Pertama1(Fungsi Pertama $parameter)", => "Fungsi Kedua Fungsi2(Fungsi Kedua $parameter)",); array( => struct Kontak ( id id; nama nama; ) => string "deskripsi string" => string "jumlah int" )
Misalkan saya ingin memanggil FirstFunction dengan data:
- Nomor Kontak: 100
- Kontak person: John
- Deskripsi Umum: Barel Minyak
- Jumlah: 500
Apa sintaks yang benar? Saya sudah mencoba berbagai macam variasi, tetapi struktur sabun tampaknya cukup fleksibel, jadi ada banyak cara untuk melakukannya. Tidak bisa mengetahuinya dari manual ...
PEMBARUAN 1: Mencoba sampel dari MMK:
$klien = new SoapClient("http://example.com/webservices?wsdl"); $params = array("id" => 100, "name" => "John", "description" => "Barrel of Oil", "jumlah" => 500,); $respons = $client->__soapCall("Function1", array($params));
Tapi saya mendapatkan respons ini: Object has no "Contact" property . Seperti yang Anda lihat di output getTypes() , ada struct bernama Contact , jadi saya rasa saya perlu mengklarifikasi bahwa parameter saya menyertakan data Contact, tetapi pertanyaannya adalah: bagaimana caranya?
PEMBARUAN 2: Saya juga mencoba struktur ini, kesalahan yang sama.
$params = array(array("id" => 100, "name" => "John",), "Barrel Minyak", 500,);
Sebaik:
$params = array("Kontak" => array("id" => 100, "nama" => "John",), "deskripsi" => "Barel Minyak", "jumlah" => 500,);
Kesalahan dalam kedua kasus: Objek tidak memiliki properti "Kontak"
8 tanggapan
Ini adalah hal yang perlu kamu lakukan.
Hanya untuk mengetahui, saya mencoba untuk menciptakan situasi Anda ...
- Dalam contoh ini, saya telah membuat layanan web .NET menggunakan WebMethod bernama Function1 dan ini adalah parameternya:
Fungsi1 (pin kontak, deskripsi string, jumlah int)
Di mana Kontak hanyalah kelas kacang yang memiliki getter dan setter untuk id dan name , seperti dalam kasus Anda.
Anda dapat mengunduh layanan web .NET ini dengan:
Kode.
Inilah yang perlu Anda lakukan di samping PHP:
(Diuji dan bekerja)
id = $id; $ini->nama = $nama; ) ) /* Inisialisasi layanan web dengan WSDL Anda */ $client = new SoapClient("http://localhost:10139/Service1.asmx?wsdl"); /* Isi Objek Kontak Anda */ $contact = new Contact(100, "John"); /* Tetapkan parameter Anda untuk permintaan */ $params = array("Contact" => $contact, "description" => "Barrel of Oil", "amount" => 500,); /* Panggil metode layanan web dengan parameter Anda, dalam hal ini: Function1 */ $response = $client->__soapCall("Function1", array($params)); /* Mencetak respons layanan web */ var_dump($response); ?>
Bagaimana saya tahu itu bekerja?
- Jika Anda melakukan print_r($params); , Anda akan melihat output ini seperti yang diharapkan oleh layanan web Anda:
Array ([Kontak] => Objek kontak ( => 100 => John) [deskripsi] => Minyak barel [jumlah] => 500)
- Ketika saya men-debug sampel .NET webservice saya mendapatkan yang berikut:
(Seperti yang Anda lihat, objek Kontak bukan null, begitu juga parameter lainnya, yang berarti bahwa permintaan Anda berhasil diselesaikan dari sisi PHP).
- Respons dari layanan web .NET seperti yang diharapkan dan ditampilkan di sisi PHP:
objek (stdClass) public "Function1Result" => string "Detail untuk permintaan Anda! id: 100, nama: John, deskripsi: Barel minyak, jumlah: 500" (panjang = 98)
Semoga ini membantu :-)
Anda juga dapat menggunakan layanan SOAP:
"Spanyol", "Nama Kota" => "Alicante"); $respons = $soapclient->getWeather($params); var_dump($respon); // Dapatkan Kota Berdasarkan Negara $param = array("NamaNegara" => "Spanyol"); $respons = $soapclient->getCitiesByCountry($param); var_dump($respon);
Ini adalah contoh dengan layanan nyata dan berfungsi.
Semoga ini membantu.
Pertama, inisialisasi layanan web:
$klien = new SoapClient("http://example.com/webservices?wsdl");
Kemudian atur dan berikan parameter:
$params = array ("arg0" => $contactid, "arg1" => $desc, "arg2" => $contactname); $respons = $client->__soapCall("nama metode", array($params));
Perhatikan bahwa nama metode tersedia di WSDL sebagai nama operasi, misalnya:
Saya tidak tahu mengapa layanan web saya memiliki struktur yang sama dengan milik Anda, tetapi tidak memerlukan kelas untuk parameter, hanya sebuah array.
Misalnya:- WSDL saya:
Var_dump($klien->getFunctions()); var_dump($client->getTypes());
Inilah hasilnya:
Array 0 => string "OrderConfirmation createOrder(OrderRequest $createOrder)" (length=56) array 0 => string "struct OrderRequest ( Identifikasi identifikasi; Pengiriman pengiriman; Parcel parcel; Penerima penerima; referensi string; )" (panjang=130) 1 => string "Identifikasi struct ( pengirim string; hash string; pencetus string; )" (panjang=75) 2 => string "Pengiriman struct ( Node dari; Node ke; )" (panjang=41) 3 => string " struct Node ( negara string; string node; )" (panjang=46) 4 => string "struct Parcel (deskripsi string; bobot desimal; string orderNumber; tanggal orderDate; )" (panjang=93) 5 => string "struct Receiver ( string firstName; string nama keluarga; Alamat alamat; string email; bahasa string; )" (panjang=106) 6 => string "Alamat struct ( string line1; string line2; string kode pos; string kota; negara string; )" (panjang =99) 7 => string "struct OrderConfirmation ( string trackingNumber; referensi string; )" (panjang=71) 8 => string "str uctOrderServiceException(kode string; Info kesalahan OrderServiceException; pesan string; )" (panjang=97)
Jadi dalam kode saya:
$client = new SoapClient("http://packandship-ws.kiala.com/psws/order?wsdl"); $params = array("reference" => $orderId, "identification" => array("sender" => param("kiala", "sender_id"), "hash" => hash("sha512", $orderId . param("kiala", "sender_id") .param("kiala", "password")), "originator" => null,), "delivery" => array("from" => array("country" = > "es", "simpul" => "",), "ke" => array("negara" => "es", "simpul" => "0299")),), "parcel" => array ( "deskripsi" => "Deskripsi", "berat" => 0.200, "orderNumber" => $orderId, "orderDate" => date("Ymd")), "receiver" => array("firstName" => " Nama Depan Pelanggan", "nama keluarga" => "Nama Sur Pelanggan", "alamat" => array("baris1" => "Alamat Baris 1", "baris2" => "Alamat Baris 2", "Kodepos" = > 28006, "kota" => "Madrid", "negara" => "es",), "email" => " [dilindungi email]", "bahasa" => "es")); $result = $client->createOrder($params); var_dump($result);
tapi dia sukses!
Ini adalah contoh yang baik untuk fungsi SOAP "__call". Namun, itu sudah ketinggalan zaman.
Envio Internacional: "; $vem = $cliente->__call("CustoEMSInternacional",array($int_zona, $int_peso)); print $vem; print "
"; ?>SOAP (Simple Object Access Protocol) adalah protokol berbasis XML untuk bertukar informasi terstruktur antara aplikasi terdistribusi melalui protokol web yang ada seperti HTTP. Spesifikasi SOAP mendefinisikan format yang digunakan oleh pesan XML, bagaimana mereka harus ditangani oleh seperangkat aturan pengkodean untuk standar, tipe data, dan konvensi untuk panggilan prosedur jarak jauh dan respons panggilan.
Layanan web adalah teknologi yang trendi dan modern. Daftar teknologi yang terkait dengan layanan web bertambah hampir setiap hari, tetapi SOAP mungkin yang paling penting dari semuanya. Ini dengan cepat menjadi protokol standar untuk mengakses layanan web. Ini menggunakan pesan XML untuk bertukar informasi antara titik akhir sambil memberikan beberapa manfaat dari protokol biner. Dukungan untuk RPC (Remote Procedure Calls) pada awalnya adalah salah satu fitur minor dari protokol SOAP, tetapi sekarang telah menjadi salah satu fitur yang paling banyak digunakan.
Ekstensi SOAP untuk PHP 5 adalah upaya pertama untuk mengimplementasikan dukungan SOAP di PHP di C. Ini memiliki beberapa keunggulan dibandingkan implementasi SOAP yang ada yang ditulis dalam PHP, yang paling penting adalah kecepatan. Saat ini, ekstensi dianggap eksperimental, tetapi secara bertahap akan menjadi lebih andal dan stabil.
Ekstensi SOAP mengimplementasikan subset besar dari spesifikasi SOAP 1.1, SOAP 1.2, dan WSDL 1.1. Tujuan utamanya adalah untuk memaksimalkan kemampuan RPC SOAP. Jika memungkinkan, WSDL digunakan untuk mempermudah implementasi layanan web.
Klien SOAP pertama
Untuk mendemonstrasikan cara membuat klien SOAP sederhana, kami menggunakan layanan demo "Penawaran Saham Tertunda" dari situs XMethods. Sebelum kita mulai menulis kode PHP, kita perlu mengumpulkan informasi berikut tentang layanan khusus ini:
- Nama metode
- URL tempat layanan ini berada
- Nilai header metode SOAPAction
- Ruang nama metode
- Nama dan jenis parameter input dan output metode
Untungnya, semua informasi ini tersedia di situs web XMethods di http://www.xmethods.com/ dari profil RPC layanan:
Nama metode | dapatkan Kutipan |
URL layanan | http://66.28.98.121:9090/soap |
SOAPAaction | urn:xmethods-delayed-quotes#getQuote |
Ruang nama metode | guci:xmethods-delayed-quotes |
Parameter masukan | Simbol (Tali) |
parameter keluaran | hasil (mengambang) |
Contoh 1 (client1.php)
$klien = baru SoapClient(NULL ,
Himpunan(
"lokasi" => "http://66.28.98.121:9090/soap",
"uri" =>
"gaya" => SOAP_RPC ,
"gunakan" => SOAP_ENCODED
));
Cetak($klien -> __panggilan(
/* Nama metode SOAP */
"dapatkan Kutipan",
/* Parameter */
Himpunan(
SabunParam baru(
/* Nilai parameter */
"ibm",
/* Nama parameter */
"simbol"
)),
/* Pilihan */
Himpunan(
/* Ruang nama metode SOAP */
"uri" => "urn:xmethods-delayed-quotes" ,
/* Header HTTP SOAPAction untuk metode SOAP */
"aksi sabun" => "urn:xmethods-delayed-quotes#getQuote"
)). "\n");
?>
Seperti yang Anda lihat, memecahkan masalah sederhana ini membutuhkan banyak usaha.
Untungnya, layanan web dapat menggambarkan diri mereka sendiri kepada klien menggunakan WSDL, yang umumnya cukup nyaman. WSDL untuk layanan "Penawaran Saham Tertunda" tersedia di halaman infonya di xmethods.com - http://services.xmethods.net/soap/urn:xmethods-delayed-quotes.wsdl .
Berikut adalah versi klien yang sama yang ditulis ulang untuk bekerja dengan dokumen WSDL ini. Di sini kita tidak perlu lagi menentukan URI server, namespace, header SOAPAction, metode encoding, dan tipe parameter. Semua informasi ini diambil dari file WSDL.
Contoh 2 (client2.php)
$klien = baru
klien sabun(
"http://services.xmethods.net/soap/urn:xmethods-delayed-quotes.wsdl"
);
Cetak($klien -> getQuote("ibm" ));
?>
Itu sedikit lebih mudah, bukan?
Masalah apa yang muncul saat menggunakan WSDL? Satu-satunya argumen yang menentang penggunaannya adalah bahwa klien harus membaca WSDL dari server sebelum prosedur apa pun dapat dipanggil, yang dapat memakan waktu cukup lama di web. Untuk mempercepat, ekstensi SOAP menyediakan opsi konfigurasi berikut: soap.wsdl_cache_enabled, soap.wsdl_cache_dir dan soap.wsdl_cache_ttl. Mereka dapat diatur dalam file php.ini atau dengan ini_set() (lihat Contoh 4). Secara default, caching WSDL diaktifkan dan file WSDL di-cache selama 1 hari.
Berikut adalah bagian SOAP dari file php.ini dengan nilai default. Anda dapat menyalinnya ke php.ini Anda.
[sabun mandi]
sabun mandi. wsdl_cache_enabled = "1"
;
aktifkan atau nonaktifkan caching WSDL
sabun mandi. wsdl_cache_dir = "/tmp"
;
menentukan nama direktori di mana SOAP-
ekstensi akan menyimpan file yang di-cache
sabun mandi. wsdl_cache_ttl="86400"
; (seumur hidup ) mengatur waktu(dalam detik) file mana dari cache yang dapat digunakan
Server SOAP Pertama
Mari kita coba menulis layanan web SOAP kita sendiri yang akan melakukan hal yang sama seperti layanan "Penawaran Saham Tertunda" dengan XMethods.
Hal pertama yang harus dilakukan adalah membuat dokumen WSDL yang menjelaskan layanan kami dalam format yang dapat dipahami klien. Untuk melakukan ini, Anda perlu sedikit memodifikasi dokumen asli yang diambil dari situs web Xmethods, jadi kita akan mulai dengan melihatnya lebih detail.
Bagian pesan mendefinisikan dua pesan. Yang pertama adalah getQuoteRequest , yang mengirimkan pesan ke getQuote dan mengambil parameter string tunggal bernama simbol. Pesan kedua adalah getQuoteResponse, respons terhadap permintaan getQuote, melewati nilai float tunggal bernama Result.
Bagian portType mendefinisikan operasi getQuote tunggal yang menentukan pesan mana yang dijelaskan di bagian pesan yang akan digunakan untuk permintaan dan mana untuk respons.
Bagian pengikatan mendefinisikan bagaimana pesan dikodekan dan ditransmisikan. Dalam hal ini, dikatakan bahwa kami akan mengirim permintaan RPC melalui HTTP menggunakan pengkodean SOAP. Ini juga mendefinisikan namespace dan nilai header SOAPAction untuk metode getQuote.
Terakhir, bagian layanan menentukan URL tempat layanan berada.
Contoh 3 (stockquote.wsdl)
xmlns:tns="http://example.org/StockQuote"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns="http://schemas.xmlsoap.org/wsdl/">
Catatan: Caching WSDL diaktifkan secara default. Saat mengembangkan dan men-debug WSDL Anda, caching sebaiknya dinonaktifkan.
Sekarang saatnya untuk mulai membuat server kita.
Pertama-tama, kita akan mengembangkan fungsi getQuote() yang akan memproses permintaan yang masuk dari web. Selanjutnya, kita akan membuat objek dari kelas SoapServer dan melampirkan fungsi kita padanya menggunakan metode SoapServer::addFunction(). Seperti yang akan Anda lihat nanti, konstruktor SoapServer() hanya memiliki satu parameter - jalur ke dokumen WSDL yang menjelaskan layanan.
Contoh 4 (server1.php)
$kutipan = array(
"ibm" => 98.42
);
global $kutipan;
return $quotes [ $simbol ];
}
ini_set("soap.wsdl_cache_enabled" , "0" ); // nonaktifkan cache WSDL
$server = new SoapServer("stockquote1.wsdl" );
$server -> addFunction("getQuote");
$server -> menangani();
?>
SoapServer dapat bekerja tanpa WSDL, seperti halnya klien, tetapi opsi ini tidak memiliki kelebihan yang membuatnya layak digunakan. Jika Anda masih ingin bekerja dengan cara ini, Anda harus memastikan bahwa nilai yang dikembalikan adalah objek dari kelas SoapParam dan SoapVar (seperti pada contoh pertama.
Berikut adalah klien untuk mengakses server SOAP kami. Dibandingkan dengan contoh sebelumnya, hanya tautan ke lokasi WSDL yang ditambahkan. File "stockquote1.wsdl" seharusnya berada di direktori yang sama dengan server SOAP.
Contoh 5 (client3.php)
$klien = new SoapClient("stockquote1.wsdl" );
print($klien -> getQuote("ibm" ));
?>
Apa masalah utama di klien dan server kami?
Sebagai permulaan, mereka tidak menangani kesalahan. Apa yang terjadi ketika server tidak menemukan hasil yang sesuai untuk nilai simbol yang diteruskan ke sana? SOAP memiliki format pesan khusus untuk pesan kesalahan, SoapFault. Untuk menghasilkan pesan seperti itu, server harus melempar pengecualian menggunakan objek SoapFault. Parameter pertama dari konstruktor SoapFault() adalah string dengan kode kesalahan, yang kedua adalah string dengan deskripsi kesalahan. Klien harus ditulis untuk menangani pengecualian SoapFault.
Kedua, fungsionalitas layanan web paling baik dienkapsulasi dalam kelas PHP. Dalam hal ini, kita tidak perlu menggunakan variabel global dan menambahkan setiap metode SOAP ke server secara terpisah. Sebagai gantinya, kita dapat menambahkan seluruh kelas, dan semua metodenya akan tersedia melalui SOAP. Berikut adalah versi klien dan server yang dimodifikasi.
Contoh 6 (server2.php)
Layanan Kutipan kelas (
private $quotes = array("ibm" => 98.42 );
Fungsi getQuote ($simbol ) (
if (isset($this -> quotes [ $symbol ])) (
kembalikan $ini -> tanda kutip [ $simbol ];
) kalau tidak (
lempar baru SoapFault("Server", "Simbol Tidak Diketahui "$simbol"." );
}
}
}
$server = new SoapServer("stockquote2.wsdl" );
$server -> setClass("Layanan Kutipan");
$server -> menangani();
?>
Seperti yang Anda lihat, saya menggunakan metode SoapServer::setClass() untuk menghubungkan objek SoapServer ke kelas QuoteService.
Contoh 7 (client4.php)
$klien = new SoapClient("stockquote2.wsdl");
mencoba(
gema "
\n" ;\n" ;
print($klien -> getQuote("ibm" ));
gema "\n";
print($klien -> getQuote("microsoft" ));
gema "\n
) catch (SoapFault $exception ) (
echo $pengecualian;
}
?>
Apa yang ada di dalam?
Jika Anda ingin memahami format pesan SOAP, atau ingin men-debug sendiri klien SOAP, maka bagian ini cocok untuk Anda.
Seperti yang Anda lihat pada contoh pertama, konstruktor SoapClient() mengambil array asosiatif sebagai parameter kedua. Dengan array ini, kita dapat memanggil berbagai opsi di server.
Mari kita lihat dua di antaranya:
- trace - memungkinkan klien untuk menyimpan permintaan dan respons SOAP (dinonaktifkan secara default).
- pengecualian - memungkinkan klien untuk mengontrol mekanisme pengecualian (diaktifkan secara default).
Mari kita lihat contoh klien SOAP berikut. Ini adalah klien yang dimodifikasi dari Contoh 5, menunjukkan dengan tepat apa yang dilewatkan antara klien dan server. Untuk mendapatkan informasi ini, metode __getLastRequest() dan __getLastResponse() digunakan.
Contoh 8 (client5.php)
$klien = new SoapClient("stockquote1.wsdl" ,array(
"jejak" => 1 ,
"pengecualian" => 0 ));
$klien -> getQuote("ibm" );
mencetak"
\n" ;" ;
cetak "Permintaan:\n" . htmlspecialchars ($client -> __getLastRequest()) . "\n" ;
cetak "Jawaban:\n" . htmlspecialchars($client -> __getLastResponse()). "\n" ;
mencetak"
?>
Berikut adalah output dari skrip. Ada sedikit modifikasi agar lebih mudah dipahami.
Pertanyaan:
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
Menjawab:
xmlns:ns1="urn:xmethods-delayed-quotes"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
Implementasi SOAP lainnya untuk PHP
Semuanya ditulis dalam PHP, bukan C.
Ringkasan
Pada artikel ini, saya hanya menjelaskan fitur utama dari ekstensi SOAP. Sebenarnya, ia dapat melakukan lebih banyak lagi, tetapi tidak mungkin untuk menunjukkan semua kemampuannya dalam kerangka satu artikel pendek. Berikut adalah daftar yang utama:
- Dukungan untuk tipe data yang kompleks (array, objek)
- Dukungan untuk SOAP - header
- Dukungan dinamis untuk SOAP 1.1 dan SOAP 1.2
Mungkin akan dibahas lebih detail di artikel selanjutnya.
Dokumentasi rinci untuk ekstensi SOAP ada di http://www.php.net/manual/en/ref.soap.php .
Pengembangan ekstensi ini masih dalam tahap awal, jadi umpan balik Anda akan membantu membuatnya lebih stabil, andal, ramah pengguna, dan lebih cepat. Silakan laporkan masalah yang Anda temui saat menggunakannya di http://bugs.php.net/ .
Tautan
tentang Penulis
Untuk membuat layanan web SOAP di PHP, Anda harus terlebih dahulu menginstal dan mengkonfigurasi PHP, serta server HTTP lokal. Dalam proyek ini, paket XAMP digunakan, yang memungkinkan penginstalan cepat server HTTP Apache dan PHP.
Secara terpisah, Anda perlu membuat perubahan pada file konfigurasi Apache dan PHP.
Dalam file konfigurasi server HTTP Apache httpd.conf, Anda perlu menemukan potongan kode berikut:
Untuk menjalankan skrip PHP di server lokal, Anda harus menyimpannya di direktori root server Apache, secara default, folder htdocs di folder root Apache.
Untuk mengubah direktori root situs, Anda perlu membuat perubahan pada file httpd.conf pada baris di bawah ini:
Untuk mengaktifkan dukungan PHP, baris berikut harus ditambahkan ke file httpd.conf:
Untuk memulai server HTTP Apache, Anda dapat menggunakan perintah konsol, atau panel kontrol XAMMP, yang memungkinkan Anda mengelola status Apache, serta mengonfigurasinya.
Tampilan utilitas ini ditunjukkan pada Gambar 2.
Gambar 2. - Utilitas Panel Kontrol XAMMP:
Untuk membuat layanan web SOAP, Anda perlu menulis dokumen PHP yang mengimplementasikan sisi klien dan server aplikasi, serta halaman WSDL untuk mendeskripsikan layanan web.
Mari kita buat layanan web yang menyediakan layanan web tunggal yang mengembalikan ke klien hasil melakukan operasi aritmatika pada dua angka. Elemen input adalah dua angka yang ditentukan oleh klien, serta variabel karakter yang mendefinisikan operasi aritmatika.
Sisi klien diimplementasikan oleh dua dokumen PHP. Dalam file form.php menggunakan elemen