PHP รวมการเข้าถึงสองโปรโตคอล ได้แก่ XML-RPC และ SOAP ซึ่งทั้งสองอย่างนี้รวมอยู่ในส่วนขยาย xmlrpc นอกจากนี้ ใน PEAR ของ PHP ไม่ว่าจะเป็น PHP 4 หรือ PHP 5 ส่วนขยาย XML-RPC ได้ถูกรวมเข้าด้วยกันโดยค่าเริ่มต้น และส่วนขยายนี้ไม่เกี่ยวข้องกับส่วนขยาย xmlrpc และสามารถใช้การโต้ตอบของโปรโตคอล XML-RPC ได้อย่างอิสระ หากมี ไม่ใช่ส่วนขยาย xmlrpc ขอแนะนำให้ใช้ส่วนขยาย PEAR::XML-RPC
ความรู้เบื้องต้นเกี่ยวกับ
บริการเว็บ บริการเว็บถูกสร้างขึ้นสำหรับการสื่อสารของระบบที่ต่างกัน แนวคิดพื้นฐานคือการใช้การเรียกระยะไกล HTTP ที่ใช้ XML เพื่อจัดเตรียมกลไกมาตรฐาน โดยไม่จำเป็นต้องสร้างโปรโตคอลใหม่ ปัจจุบันมีมาตรฐานโปรโตคอลสองมาตรฐานสำหรับการสื่อสารบริการเว็บ หนึ่งคือ XML-RPC และอีกอันคือ SOAP XML-RPC นั้นค่อนข้างง่ายและปรากฏก่อนหน้านี้ ในขณะที่ SOAP นั้นซับซ้อนกว่าและส่วนใหญ่จะใช้เมื่อจำเป็นต้องมีความเสถียร ความคงทน ความปลอดภัย และการโต้ตอบที่ซับซ้อน
ในที่นี้เราใช้ XML-RPC เพื่ออธิบายกระบวนการโต้ตอบของบริการเว็บโดยย่อ เนื้อหาบางส่วนมาจากคู่มือ PHP สำหรับรายละเอียดเพิ่มเติม ขอแนะนำให้อ้างอิงถึงคู่มือ
ติดตั้งส่วนขยาย xmlrpc
หากไม่ได้ติดตั้งส่วนขยาย xmlrpc php ในระบบของคุณ โปรดติดตั้งอย่างถูกต้อง
ภายใต้แพลตฟอร์ม Windows ขั้นแรกให้ใส่ส่วนขยาย php_xmlrpc.dll ในไดเร็กทอรีการติดตั้ง PHP ลงในไดเร็กทอรี C:Windows หรือ C:Winnt (ส่วนขยายสำหรับ PHP4 อยู่ในไดเร็กทอรี C:phpextensions และส่วนขยายสำหรับ PHP5 อยู่ในไดเรกทอรี C: phpext) และลบเครื่องหมายอัฒภาค ";" หน้า extension=php_xmlrpc.dll ใน C:Windowsphp.ini หรือ C:Winntphp.ini จากนั้นรีสตาร์ทเว็บเซิร์ฟเวอร์ และตรวจสอบ phpinfo () ว่ามีโปรเจ็กต์ XML-RPC หรือไม่ สามารถระบุได้ว่าส่วนขยาย xmlrpc ได้รับการติดตั้งอย่างถูกต้องหรือไม่
ภายใต้แพลตฟอร์ม Unix/Linux หากไม่ได้ติดตั้งส่วนขยาย xmlrpc โปรดคอมไพล์ PHP ใหม่ เพิ่มตัวเลือก --with-xmlrpc เมื่อกำหนดค่า จากนั้นตรวจสอบ phpinfo() เพื่อดูว่าติดตั้ง xmlrpc ตามปกติหรือไม่
(หมายเหตุ: การดำเนินการต่อไปนี้ขึ้นอยู่กับการติดตั้งส่วนขยาย xmlrpc ปกติ โปรดแน่ใจว่าได้ติดตั้งอย่างถูกต้อง)
หลักการทำงานของ XML-RPC
โดยทั่วไป XML-RPC หมายความว่ากระบวนการทั้งหมดใช้ XML เพื่อการสื่อสาร ขั้นแรก เซิร์ฟเวอร์ RPC ถูกสร้างขึ้นเพื่อประมวลผลคำขอที่ห่อหุ้ม XML ที่ส่งผ่านจากไคลเอนต์ RPC และผลลัพธ์การประมวลผลจะถูกส่งกลับไปยังไคลเอนต์ RPC ในรูปแบบของ XML จากนั้นไคลเอนต์จะวิเคราะห์ XML เพื่อรับข้อมูลที่ต้องการ
ฝั่งเซิร์ฟเวอร์ของ XML-RPC ต้องมีฟังก์ชันสำเร็จรูปเพื่อให้ไคลเอ็นต์เรียกใช้ และฟังก์ชันและวิธีการในคำขอที่ไคลเอ็นต์ส่งมาจะต้องสอดคล้องกับฟังก์ชันในฝั่งเซิร์ฟเวอร์ มิฉะนั้นจะไม่ได้รับผลลัพธ์ที่ต้องการ
ด้านล่างนี้ฉันสร้างโค้ดง่ายๆ เพื่ออธิบายกระบวนการทั้งหมด
เซิร์ฟเวอร์ฝึกหัด XML-RPC
ใช้ฟังก์ชัน xmlrpc_server_create เพื่อสร้างเซิร์ฟเวอร์ จากนั้นลงทะเบียนอินเทอร์เฟซการเรียก RPC ที่จำเป็นต้องเปิดเผย ยอมรับ POST ข้อมูล XML จากไคลเอนต์ RPC จากนั้นประมวลผลผลลัพธ์การประมวลผลจะแสดงต่อไคลเอนต์ ในรูปแบบของ XML
รหัสจะเป็นดังนี้: rpc_server.php
<?php
-
* ฟังก์ชั่น: ฟังก์ชั่นที่ไคลเอ็นต์ RPC กำหนดให้เรียกใช้
* พารามิเตอร์:
* $method คือฟังก์ชันที่ไคลเอ็นต์จำเป็นต้องเรียกใช้
* $params คืออาร์เรย์พารามิเตอร์ของฟังก์ชันที่ไคลเอ็นต์จำเป็นต้องเรียกใช้
* Return: ส่งคืนผลลัพธ์การโทรที่ระบุ
-
ฟังก์ชั่น rpc_server_func($method, $params) {
$parameter = $params[0];
ถ้า ($พารามิเตอร์ == "รับ"){
$return = ''ข้อมูลนี้โดยวิธีรับ'';
}อื่น{
$return = ''ไม่ได้ระบุวิธีการหรือพารามิเตอร์'';
-
ส่งคืน $ ส่งคืน;
}
//สร้างฝั่งเซิร์ฟเวอร์ XML-RPC
$xmlrpc_server = xmlrpc_server_create();
//ลงทะเบียนเมธอด rpc_server ที่เซิร์ฟเวอร์เรียก ซึ่งจริงๆ แล้วชี้ไปที่ฟังก์ชัน rpc_server_func
xmlrpc_server_register_method($xmlrpc_server, "rpc_server", "rpc_server_func");
// ยอมรับข้อมูล XML POST จากไคลเอนต์
$request = $HTTP_RAW_POST_DATA;
// รับผลการดำเนินการหลังจากดำเนินการคำขอ XML ที่เรียกลูกค้า
$xmlrpc_response = xmlrpc_server_call_method($xmlrpc_server, $request, null);
// ส่งออกผลลัพธ์ XML หลังจากประมวลผลฟังก์ชัน
header(''ประเภทเนื้อหา: text/xml'');
echo $xmlrpc_response;
//ทำลายทรัพยากรฝั่งเซิร์ฟเวอร์ XML-RPC
xmlrpc_server_destroy($xmlrpc_server);
?>
หลังจากสร้างฝั่งเซิร์ฟเวอร์แล้ว มาสร้างไคลเอนต์ RPC ของเรากันดีกว่า ไคลเอนต์เข้าถึงพอร์ต 80 ของเซิร์ฟเวอร์ XML-RPC โดยประมาณผ่านซ็อกเก็ต จากนั้นสรุปอินเทอร์เฟซ RPC ที่ต้องถูกเรียกเป็น XML ส่งไปยังเซิร์ฟเวอร์ RPC ผ่านการร้องขอ POST และสุดท้ายจะได้รับผลลัพธ์ที่ส่งคืนโดยเซิร์ฟเวอร์
รหัสจะเป็นดังนี้: rpc_client.php
<?php
-
* ฟังก์ชั่น: ฟังก์ชั่นที่มอบให้กับไคลเอนต์เพื่อเชื่อมต่อกับเซิร์ฟเวอร์ XML-RPC
* พารามิเตอร์:
* $host โฮสต์ที่ต้องการเชื่อมต่อ
* พอร์ต $port เพื่อเชื่อมต่อกับโฮสต์
* $rpc_server ไฟล์ฝั่งเซิร์ฟเวอร์ XML-RPC
* $request ข้อมูลคำขอ XML แบบห่อหุ้ม
* ส่งคืน: หากการเชื่อมต่อสำเร็จ ข้อมูล XML ที่ส่งคืนโดยเซิร์ฟเวอร์จะถูกส่งคืน หากการเชื่อมต่อสำเร็จก็จะคืนค่าเท็จ
-
ฟังก์ชั่น rpc_client_call($host, $port, $rpc_server, $request) {
//เปิดเซิร์ฟเวอร์ที่ระบุ
$fp = fsockopen($host, $port);
//สร้างแบบสอบถามข้อมูลคำขอ POST ของเซิร์ฟเวอร์ XML-RPC ที่ต้องการสื่อสาร
$query = "POST $rpc_server HTTP/1.0nUser_Agent: XML-RPC ClientnHost: ".$host."nContent-Type: text/xmlnContent-Length: ".strlen($request)"n n".$request"n";
//ส่งโปรโตคอล HTTP ที่สร้างขึ้นไปยังเซิร์ฟเวอร์ และส่งคืนค่า false หากล้มเหลว
ถ้า (!fputs($fp, $query, strlen($query))) {
$errstr = "เขียนผิดพลาด";
กลับเท็จ;
-
//รับข้อมูลทั้งหมดที่ส่งคืนจากเซิร์ฟเวอร์ รวมถึงส่วนหัว HTTP และข้อมูล XML
$เนื้อหา = '''';
ในขณะที่ (!feof($fp)){
$contents .= fgets($fp);
}
//ส่งคืนเนื้อหาที่ได้รับหลังจากปิดทรัพยากรการเชื่อมต่อ
fclose($fp);
ส่งคืนเนื้อหา $;
}
//สร้างข้อมูลเพื่อเชื่อมต่อกับเซิร์ฟเวอร์ RPC
$host = ''localhost'';
$ พอร์ต = 80;
$rpc_server = ''/~heiyeluren/rpc_server.php'';
//เข้ารหัสคำขอ XML ที่ต้องส่งไปยัง XML วิธีการที่ต้องเรียกคือ rpc_server และพารามิเตอร์จะได้รับ
$request = xmlrpc_encode_request(''rpc_server'', ''get'');
//เรียกใช้ฟังก์ชัน rpc_client_call เพื่อส่งคำขอทั้งหมดไปยังเซิร์ฟเวอร์ XML-RPC และรับข้อมูล
$response = rpc_client_call($host, $port, $rpc_server, $request);
//วิเคราะห์ XML ที่ส่งคืนจากเซิร์ฟเวอร์ ลบข้อมูลส่วนหัว HTTP และแปลง XML เป็นสตริงที่ PHP สามารถรับรู้ได้
$split = ''<?xml version="1.0" encoding="iso-8859-1"?>'';
$xml = ระเบิด($แยก, $ตอบกลับ);
$xml = $split . array_pop($xml);
$response = xmlrpc_decode($xml);
//ส่งออกข้อมูลที่ได้รับจากเซิร์ฟเวอร์ RPC
print_r($ตอบกลับ);
?>
พูดคร่าวๆ ตัวอย่างข้างต้นของเราคือการส่งเมธอดที่เรียกว่า rpc_server โดยได้รับพารามิเตอร์ จากนั้นรับการส่งคืนจากเซิร์ฟเวอร์ ข้อมูล XML ที่ส่งคืนโดยเซิร์ฟเวอร์คือ:
<?xml version="1.0" encoding=" iso-8859-1 "?>
<วิธีการตอบสนอง>
<พารามิเตอร์>
<พารามิเตอร์>
<มูลค่า>
<string>ข้อมูลนี้ตามวิธีรับ</string>
</ค่า>
</พารามิเตอร์>
</พารามิเตอร์>
</methodResponse>
จากนั้นเราเข้ารหัส XML นี้เป็นสตริง PHP ผ่านฟังก์ชัน xmlrpc_decode และเราสามารถประมวลผลได้ตามต้องการ และการโต้ตอบของบริการบนเว็บทั้งหมดก็เสร็จสมบูรณ์
สรุป
ไม่ว่าจะเป็น XML-RPC หรือ SOAP ตราบใดที่ช่วยให้เราทำการเรียกกระบวนการระยะไกลได้อย่างเสถียรและปลอดภัยและดำเนินโครงการของเราให้เสร็จสิ้น บริการบนเว็บทั้งหมดก็จะประสบความสำเร็จ นอกจากนี้ หากเป็นไปได้ คุณยังสามารถลองใช้ XML-RPC ใน PEAR เพื่อดำเนินการที่คล้ายกันข้างต้นได้ ซึ่งอาจง่ายกว่าและเหมาะสมกว่าสำหรับคุณ
เพียงใช้ XML-RPC สำหรับการโต้ตอบกับบริการเว็บ สำหรับโค้ดบางส่วน โปรดดูคู่มือ PHP หากคุณต้องการรับข้อมูลโดยละเอียด ขอแนะนำให้อ้างอิงถึงคู่มือ
บทความนี้มาจากลิงค์ต้นฉบับของข้อมูล PHP: http://www.phpchina.com/html/84/n-33884.html