首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP XML-RPC 建構 Web Service 完整實作教學

     編輯:PHP 綜合知識

Web Service 通訊協定主流有 XML-RPC 與 SOAP 兩種。XML-RPC 結構簡單、歷史悠久,適合輕量級遠程呼叫;SOAP 功能豐富但複雜,適合企業級嚴謹整合。PHP 內建 xmlrpc 擴展,PEAR 也提供純 PHP 實作。本文以 XML-RPC 為例,示範完整的 Server/Client 互動流程。

環境準備:安裝 xmlrpc 擴展

  • Windows:將 php_xmlrpc.dll 放入系統目錄,php.ini 啟用 extension=php_xmlrpc.dll,重啟 Web Server
  • Linux/Unix:重新編譯 PHP 加入 --with-xmlrpc 參數
  • 驗證:phpinfo() 出現 XML-RPC 區塊即成功

XML-RPC 運作原理

  1. Client 將呼叫的方法名與參數封裝為 XML
  2. 透過 HTTP POST 送至 Server
  3. Server 解析 XML,對應註冊的 PHP 函數執行
  4. 將回傳值封裝為 XML 回應 Client
  5. Client 解析 XML 取得結果

Server 端實作 (rpc_server.php)

<?php
// 提供給 Client 呼叫的函數
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 Server
$xmlrpc_server = xmlrpc_server_create();
// 註冊方法:對外名稱 rpc_server -> 實際函數 rpc_server_func
xmlrpc_server_register_method($xmlrpc_server, "rpc_server", "rpc_server_func");

// 接收 Client 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;

// 釋放資源
xmlrpc_server_destroy($xmlrpc_server);
?>

Client 端實作 (rpc_client.php)

<?php
// Socket 連線並發送 XML 請求
function rpc_client_call($host, $port, $rpc_server, $request) {
    $fp = fsockopen($host, $port);
    $query = "POST $rpc_server HTTP/1.0\r\n"
           . "User_Agent: XML-RPC Client\r\n"
           . "Host: $host\r\n"
           . "Content-Type: text/xml\r\n"
           . "Content-Length: " . strlen($request) . "\r\n\r\n"
           . $request . "\r\n";

    if (!fputs($fp, $query, strlen($query))) { return false; }

    $contents = '';
    while (!feof($fp)) { $contents .= fgets($fp); }
    fclose($fp);
    return $contents;
}

// 組裝請求參數
$host = 'localhost';
$port = 80;
$rpc_server = '/~heiyeluren/rpc_server.php';
// 編碼:呼叫 rpc_server 方法,參數為 'get'
$request = xmlrpc_encode_request('rpc_server', 'get');

// 發送請求並取得回應
$response = rpc_client_call($host, $port, $rpc_server, $request);

// 移除 HTTP Header,解碼 XML 為 PHP 變數
$xml = substr($response, strpos($response, '

實際傳輸的 XML 範例



  
    
      This data by get method
    
  

進階建議

  • 生產環境建議加入簽名驗證、IP 白名單、HTTPS 加密
  • 複雜資料結構可使用 xmlrpc_encode_request() 自動處理陣列/物件序列化
  • 若無 xmlrpc 擴展,可改用 PEAR::XML_RPC 純 PHP 實作

XML-RPC 雖輕量,但缺乏標準化的服務描述(如 WSDL),適用於內部系統輕量整合;對外開放 API 建議改用 REST + JSON 或 gRPC。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved