• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

PHP中XML-RPC使用笔记

php 搞代码 4年前 (2022-01-23) 13次浏览 已收录 0个评论

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 — 为一个 (本文来源gaodai#ma#com搞@@代~&码网
    搞代gaodaima码

    PHP 字符串值设置 xmlrpc 的类型、base64 或日期时间

  • 以上就介绍了PHP中XML-RPC使用笔记,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。


    搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
    转载请注明原文链接:PHP中XML-RPC使用笔记

    喜欢 (0)
    [搞代码]
    分享 (0)
    发表我的评论
    取消评论

    表情 贴图 加粗 删除线 居中 斜体 签到

    Hi,您需要填写昵称和邮箱!

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址