首頁 > 後端開發 > php教程 > PHP中XML-RPC使用筆記

PHP中XML-RPC使用筆記

WBOY
發布: 2016-07-30 13:31:43
原創
958 人瀏覽過
PHP中整合了XML-RPC和SOAP兩種Web Service通訊兩種協定標準,基本的想法就是使用基於XML的HTTP的遠端呼叫提供一種標準的機制,而省去建立一種新協定的需求。其實這在實際開發應用上是非常實用,例如PC客戶端或現在流行的手機客戶端需要同伺服器端通信,這時候XML-RPC就是一個很好的解決方案。 這裡記一下的PHP中如何使用XML-RPC的筆記,雖然這種方式運用的不多。 基本原理就是XML-RPC使用XML來進行通訊。先建構一個RPC 伺服器端用來出來從RPC客戶端傳遞過來的使用XML封裝的請求,並且把處理結果透過XML的形式傳回RPC客戶端,客戶端就去分析XML取得自己需要的資料。 XML-RPC的伺服器端必須有現成的函數提供給客戶端調用,且客戶端提交的請求中的函數和方法必須與伺服器端的一致,否則將無法取得所需的結果。 首先要確保你的PHP支援XML-RPC擴展,如果沒有可以請安裝,windows下php_xmlrpc.dll放到你的PHP擴展目錄下,Linux重新編譯PHP,在configure的時候請加入–with-xmlrpc 選項,因為我用的是Ubuntu,所以直接sudo apt-get install php5-xmlrpc就可以了。 伺服器段程式碼如下,註解詳細:
/* server.php
* @function 提供给RPC客户端调用的函数
* @param   string  $method 客户端需要调用的函数
* @param   array   $params 客户端需要调用的函数的参数数组
* return   string  返回调用结果
*/
function rpc_server_func($method, $params) {
$parameter = $params[0];
if ($parameter == "get") {
$return = 'This data by get method';
} else {
$return = 'Not specify method or params';
}
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");
//接受客户端POST过来的XML数据
$request = $HTTP_RAW_POST_DATA;
//执行调用客户端的XML请求后获取执行结果
$xmlrpc_response = xmlrpc_server_call_method($xmlrpc_server, $request, null);
//把函数处理后的结果XML进行输出
header('Content-Type: text/xml');
echo $xmlrpc_response;
//销毁XML-RPC服务器端资源
xmlrpc_server_destroy($xmlrpc_server);
登入後複製

/* client.php
* @function    提供给客户端进行连接XML-RPC服务器端的函数
* @param   string  $host  需要连接的主机
* @param   string  $port  连接主机的端口
* @param   string  $rpc_server XML-RPC服务器端文件
* @param   $request  封装的XML请求信息
* return   成功返回由服务器端返回的XML信息,失败返回false
*/
function rpc_client_call($host, $port, $rpc_server, $request) {
//打开指定的服务器端
$fp = fsockopen($host, $port);
//构造需要进行通信的XML-RPC服务器端的查询POST请求信息
$query = "POST $rpc_server HTTP/1.0\nUser_Agent: XML-RPC Client\nHost: " . $host . "\nContent-Type: text/xml\nContent-Length: " . strlen($request) . "\n\n" . $request . "\n";
//把构造好的HTTP协议发送给服务器,失败返回false
if (!fputs($fp, $query, strlen($query))) {
$errstr = "Write error";
return false;
}
//获取从服务器端返回的所有信息,包括HTTP头和XML信息
$contents = "";
while (!feof($fp)) {
$contents .= fgets($fp);
}
//关闭连接资源后返回获取的内容
fclose($fp);
return $contents;
}
//构造连接RPC服务器端的信息
$host = 'localhost';
$port = 80;
$rpc_server = 'server.php';
//把需要发送的XML请求进行编码成XML,需要调用的方法是rpc_server,参数是get
$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 = explode($split, $response);
$xml = $split . array_pop($xml);
$response = xmlrpc_decode($xml);
//输出从RPC服务器端获取的信息
print_r($response);
登入後複製

透過過xmlrpc_decode函數把這個XML編碼為PHP的Service以便處理,整個Web Service完成。 XML-RPC函數參考:
  • xmlrpc_decode_request — 將 XML 譯為 PHP 本身的型別
  • xmlrpc_decode — 將 XML 譯為 PHP 本身的型別
  • xmlrpc_encode_request — 為 PHP 的值產生 XML
  • xmlrpc_encode — 為 PHP 的值產生 XML
  • xmlrpc_get_type — 為 PHP 的值取得 xmlrpc 的型別
  • xmlrpc_is_fault — Determines if an array value represents an XMLRPC fault
  • xmlrpc_parse_method_descriptions — 將 XML 譯為方法描述的清單
  • xmlrpc_server_add_introspection_data — 新增自我描述的文件
  • xmlrpc_server_call_method — 解析 XML 請求同時呼叫方法
  • xmlrpc_server_create — 建立一個 xmlrpc 服務端
  • xmlrpc_server_destroy — 銷毀服務端資源
  • xmlrpc_server_register_introspection_callback — 註冊一個 PHP 函數用於產生文件
  • xmlrpc_server_register_method — 註冊一個 PHP 函數用來符合 xmlrpc 方法名稱
  • xmlrpc_set_type — 為一個 PHP 字串值設定 xmlrpc 的型別、base64 或日期時間

  • 以上就介紹了PHP中XML-RPC使用筆記,包含了面向的內容,希望對PHP教學有興趣的朋友有幫助。

    相關標籤:
    來源:php.cn
    本網站聲明
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
    熱門教學
    更多>
    最新下載
    更多>
    網站特效
    網站源碼
    網站素材
    前端模板