php rpc实例,XML-RPC实例(PHP)

本篇文章帮大家学习xml-RPC实例(php),包含了XML-RPC实例(PHP)使用方法、操作技巧、实例演示和注意事项,有一定的学习价值,大家可以用来参考。

在这一小节文章中,将通过一个PHP实现XML-RPC调用示例的讲解,让大家了解在PHP中,如何编写使用XML-RPC的PHP程序。

PHP编程语言中集成了XML-RPC和SOAP两种Web Service通信两种协议标准,基本的思想就是使用基于XML的HTTP的远程调用提供一种标准的机制,而省去建立一种新协议的需求。其实这在实际开发应用中是非常实用,比如PC客户端或者现在流行的手机客户端需要同服务器端通信,这时候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 就可以了。这里以Windows下的WAMP集成开发环境来运行此示例代码。

服务器端代码如下(文件: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);

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 或日期时间

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值