تدمج PHP الوصول إلى بروتوكولين، XML-RPC وSOAP، وكلاهما يتركزان في ملحق xmlrpc. بالإضافة إلى ذلك، في PHP PEAR، سواء كان 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)، وقم بإزالة الفاصلة المنقوطة ";" أمام الملحق=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
* حدود:
* الطريقة $ هي الوظيفة التي يحتاج العميل إلى الاتصال بها
* $params هو مصفوفة معلمات الوظيفة التي يحتاج العميل إلى الاتصال بها.
* العودة: إرجاع نتيجة المكالمة المحددة
*/
وظيفة rpc_server_func($method, $params) {
$parameter = $params[0];
إذا ($المعلمة == "الحصول على"){
$return = ''هذه البيانات بطريقة الحصول عليها'';
}آخر{
$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 من العميل
$request = $HTTP_RAW_POST_DATA;
// احصل على نتيجة التنفيذ بعد تنفيذ طلب XML الذي يستدعي العميل
$xmlrpc_response = xmlrpc_server_call_method($xmlrpc_server, $request, null);
// إخراج نتيجة XML بعد معالجة الوظيفة
header(''نوع المحتوى: نص/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."nنوع المحتوى: text/xmlnطول المحتوى: ".strlen($request)."n n".$request."n";
// أرسل بروتوكول HTTP الذي تم إنشاؤه إلى الخادم، وقم بإرجاع خطأ إذا فشل.
إذا (!fputs($fp, $query, strlen($query))) {
$errstr = "خطأ في الكتابة";
عودة كاذبة.
}
// احصل على جميع المعلومات التي تم إرجاعها من الخادم، بما في ذلك رؤوس HTTP ومعلومات XML
محتويات $ = '''';
بينما (!feof($fp)){
محتويات $ .= fgets($fp);
}
// قم بإرجاع المحتوى الذي تم الحصول عليه بعد إغلاق مورد الاتصال
fClose($fp);
إرجاع محتويات $؛
}
// إنشاء معلومات للاتصال بخادم RPC
$host = ''localhost'';
منفذ $ = 80؛
$rpc_server = ''/~heiyeluren/rpc_server.php'';
// تشفير طلب XML الذي يجب إرساله إلى XML.
$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 = تنفجر($split, $response);
$xml = $split .ray_pop($xml);
$response = xmlrpc_decode($xml);
// إخراج المعلومات التي تم الحصول عليها من خادم RPC
print_r($response);
?>
بشكل تقريبي، المثال أعلاه هو إرسال طريقة تسمى rpc_server، والمعلمة هي get، ثم الحصول على الإرجاع من الخادم، وبيانات XML التي يتم إرجاعها بواسطة الخادم هي:
<?xml version="1.0" encoding=". ايزو-8859-1 "؟>
<طريقة الاستجابة>
<المعلمات>
<المعلمة>
<القيمة>
<string>هذه البيانات عن طريق طريقة الحصول</string>
</القيمة>
</param>
</params>
</methodResponse>
ثم نقوم بتشفير XML هذا في سلسلة PHP من خلال وظيفة xmlrpc_decode، ويمكننا معالجته حسب الرغبة، ويتم إكمال تفاعل خدمة الويب بالكامل.
الاستنتاج
سواء كان XML-RPC أو SOAP، طالما أنه يسمح لنا بإجراء مكالمات العمليات عن بعد بشكل مستقر وآمن وإكمال مشروعنا، فستكون خدمة الويب بأكملها ناجحة. بالإضافة إلى ذلك، إذا أمكن، يمكنك أيضًا محاولة استخدام XML-RPC في PEAR لتنفيذ عمليات مماثلة أعلاه، وقد يكون الأمر أبسط وأكثر ملاءمة لك.
ما عليك سوى استخدام XML-RPC لتفاعل خدمة الويب. بالنسبة لبعض الرموز، يرجى الرجوع إلى دليل PHP. إذا كنت ترغب في الحصول على معلومات مفصلة، فمن المستحسن الرجوع إلى الدليل. إذا كانت المقالة غير صحيحة، يرجى تصحيحها.
تأتي هذه المقالة من الرابط الأصلي لمعلومات PHP: http://www.phpchina.com/html/84/n-33884.html