设为首页 收藏本站
查看: 716|回复: 0

[经验分享] [转]用PHP写XMLRPC

[复制链接]

尚未签到

发表于 2017-3-24 11:47:55 | 显示全部楼层 |阅读模式
  这几天一直在研究XMLRPC。最初的原因是因为del.icio.us支持每日的“书签自动发布到Blog”功能,而我的533上面有自己写PHP Blog程序,于是就自己联想到是否可以让del.icio.us自动发布到那个上面去。一方面可以保存自己的书签,另外还可以当没有时间写Blog的时候,可以偷懒一下。这样一举两得的时期,我是最愿意做的。
  del.icio.us主要利用metaWeblog API这个XMLRPC规范来实现Blog自动发布的,所以只有你的Blog程序支持这个接口,实际上只要支持metaWeblog.newPost这个函数就可以了。
  XMLRPC-PHP是一个PHP库,它的特点是功能强大,而且不需要PHP的原生XMLRPC支持,只需要PHP的XML库。XMLRPC-PHP对于XMLRPC的各种数据类型进行了封装,并且自动提供如ListMethod、GetMethodSig、GetMethodHelp等函数。
  简单的一个PHP函数,计算两个数的总和:
  //addFunc的Singature(签名),表明其返回类型是int(第一个参数),和参数类型(后面的参数);
  $addFunc_sig=array(array($xmlrpcInt,$xmlrpcInt,$xmlrpcInt));
  //addFunc的Doc(说明)
  $addFunc_doc='Calucate the sum of Tow Integer,return Integer";
  function AddFunc($m){
  $a=$m->getParam(0);//注意这里$a是signatue里面的第二个参数
  $b=$m->getParam(1);//这里的$b是第三个参数
  $a=$a->scalarValue(); //取得他们的具体数值。
  $b=$b->scalarValue();
  //下面这些返回一个xmlrpcresp对象,对象的内容包括一个int类型的val(变量)
  return new xmlrpcresp(new xmrpcval($a+$b,"int"));
  }
  //下面输出:
  $a=array(
  "example.addTow"=>array(
  "function" => "addFunc",
  "signature" => $addFunc_sig,
  "docstring" => $addFunc_doc
  )
  );
  //生成xmlrpc_server变量,第一个参数是方法的数组。false代表立刻进行服务。
  $s=new xmlrpc_server($a,false);
  $s->setDebug(3); //3为调试等级。3可以比较详细的输出错误信息。如果没有错误了,可以用确省的1就可以了,就是没有Debug信息。
  $s->service(); //开始服务。
  从上面来看,用XMLRPC-PHP库建立XMLRPC程序是非常的快速方便。
  下面几个是XMLRPC里面几个其他数据类型的返回和调用其数值:
  1、数组变量的查询和返回(摘自XMLRPC-PHP自带的例子demo/server.php)
  $bitflipper_sig=array(array($xmlrpcArray, $xmlrpcArray));
  $bitflipper_doc='Accepts an array of booleans, and returns them inverted';
  function bitflipper($m) {
  global $xmlrpcArray;
  $v=$m->getParam(0);
  $sz=$v->arraysize();
  $rv=new xmlrpcval(array(), $xmlrpcArray); //必须用xmlrpc方式来建立数组
  for($j=0; $j  
  $b=$v->arraymem($j); //获取数组里面的Salar
  if ($b->scalarval()) { //查看数组元素的值
  $rv->addScalar(false, "boolean"); //向返回数组里面添加Salar
  } else {
  $rv->addScalar(true, "boolean");
  }
  }
  return new xmlrpcresp($rv); //返回数组。
  }
  2、Struct变量的查询和返回
  第一个变量的访问例子:
  $v1_easyStruct_sig=array(array($xmlrpcInt, $xmlrpcStruct));
  $v1_easyStruct_doc='This handler takes a single parameter, a struct, containing at least three elements named moe, larry and curly, all <i4>s. Your handler must add the three numbers and return the result.'; </i4>
  function v1_easyStruct($m) {
  $sno=$m->getParam(0);
  $moe=$sno->structmem("moe"); //存取Struct里面的数值
  $larry=$sno->structmem("larry");
  $curly=$sno->structmem("curly");
  $num=$moe->scalarval() + $larry->scalarval() + $curly->scalarval();
  return new xmlrpcresp(new xmlrpcval($num, "int")); }
  第二个返回Struct的例子:
  $v1_simpleStructReturn_sig=array(array($xmlrpcStruct, $xmlrpcInt)); $v1_simpleStructReturn_doc='This handler takes one parameter, and returns a struct containing three elements, times10, times100 and times1000, the result of multiplying the number by 10, 100 and 1000.';
  function v1_simpleStructReturn($m) {
  $sno=$m->getParam(0);
  $v=$sno->scalarval();
  return new xmlrpcresp(new xmlrpcval(array(
  "times10" => new xmlrpcval($v*10, "int"),
  "times100" => new xmlrpcval($v*100, "int"),
  "times1000" => new xmlrpcval($v*1000, "int")),
  "struct" )); //返回一个Struct.
  }
  看了这些,如果对于XMLRPC协议比较熟悉,发现XMLRPC-PHP对于XMLRPC的支持是非常的完善的!
  最后一点,同其他的远程调用的调试一样,XMLRPC的PHP程序的调试比较的麻烦。幸亏xmlrpc-php的主页上面提供了一个调试XMLRPC的好地方,你可以从这里访问。     

  最主要把"show debug info"显示调到“More”,这样可以非常容易的找到出错原因。
  另外一点,如果想测试一个东西,最好从最简单的东西开始,其实无论是HelloWorld还是addTwo都是一个非常好的起点,如果他们成功了,表示你的程序的基础设置是没有问题。如果和我一样,马上就写一个比较复杂的程序来测试一个新事物,如果测试不成功,到底是测试程序本身的错误还是基础设置的错误,就像一头乱麻一样,分不清楚头绪,找不到方向了。当然一个比较好的调试系统,可以非常清楚显示运行过程,就太好了。
  明天再写如何让我的PHP Blog程序能够接受Del.icio.us的发布,也写一下如何调用LiveSpace的MetaWeblog接口。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-354620-1-1.html 上篇帖子: php知识点小结 下篇帖子: PHP中 Magic quotes
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表