PHP中XML-RPC使用筆記

來源:互聯網
上載者:User
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協議發送給伺服器,失敗返回falseif (!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的字串以便處理,整個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教程有興趣的朋友有所協助。

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.