`

XML-RPC for PHP简介及使用

    博客分类:
  • PHP
阅读更多

 

一.XML-RPC是什么?
XML-RPCUserland Software公司设计的一种格式:是一种使用HTTP协议传输XML格式文件来获取远程程序调用(Remote Procedure Call)的传输方式。官方网站是www.xmlrpc.com

http://phpxmlrpc.sourceforge.net/上面有个PHP XML-RPC的框架(类集合)用于使用PHP语言来写XML-RPC客户端和服务端。现在的稳定发行版本是2.2,下载地址是http://sourceforge.net/projects/phpxmlrpc/files/phpxmlrpc/2.2.2/xmlrpc-2.2.2.tar.gz/download

另外你在www.xmlrpc.com上面也可以找到其他s语言的XML-RPC列表,例如PerlPython

这篇文章将介绍XML-RPC for PHP的类库使用。

二.系统运行要求

该类库的设计目标是可扩展性和向后兼容性。因此,它支持大部分的现有PHP版本。最低需要的PHP版本是4.2。该类库提供一个兼容层来支持PHP 4.0.54.1。当然官方建议是使用PHP 5.0或者更高版本。

注意,如果你要用SSL或者HTTP 1.1跟远程服务器通信,必须把“CURL”扩展编译进PHP中。

另外,PHP自带的原生“xmlrpc”扩展跟这里介绍的XML-RPC类库不是同一个东西,所以并不需要将其编译进PHP中。

三.相关类介绍

1.xmlrpcval

XML-RPC中有六种基本类型和两种复合类型,基本类型是:intbooleanstringdoubledateTime.iso8601base6,复合类型是:arraystructXmlrpcval的作用就是把PHP中类型转换成这几种类型放入XML-RPC中,以便传输。

new xmlrpcval(123,"int");   //将123作为XML-RPC int类型
new xmlrpcval(123,"string"); //将123作为XML-RPC string类型
new xmlrpcval(123);//如果没有第二个参数,系统默认将其作为string类型

new xmlrpcval( //XML-RPC array类型
array(
new xmlrpcval("string1"),
new xmlrpcval("string2"),
new xmlrpcval("string3"),),"array");

new xmlrpcval( //XML-RPC struct类型
array( "name"=>new xmlrpcval("codebean","string"),
"age"=>new xmlrpcval(34,"int"),
"address"=>new xmlrpcval(
array( "street"=>new xmlrpcva("xiaoyinxilu","string"), "city"=>new xmlrpcval("beijing","string") ),
"struct")),
"struct");

 

相关方法:
kindOf():返回该对象的基本类型:"struct","array","scalar"

scalarVal():如果$val->kindOf()=="scalar",则直接返回改对象的PHP对应的值。
arrayMen(int $n):如果$val->kindOf()=="array",返回$val中第n个的值。
arraySize():如果$val->kindOf()=="array",返回$val的元素个数。

2.xmlrpcmsg
这个类提供一个向XML-RPC服务器发送请求的对象,客户端发送xmlrpcmsg到服务器,服务器返回一个xmlrpcresp

//请求服务器的examples.getStateName方法,参数是123
$message = new xmlrpcmsg("examples.getStateName",array(new xmlrpcval(123,"int")));

 

相关函数:
getNumParams():获取xmlrpcmsg对象的参数的总数。
getParam(int $n):获取xmlrpcmsg对象的第n个数的值。
3.xmlrpc_client
客户端的基本类。

 

 

//在服务端www.test.com上面的interface.php路径建立相关链接。    
$client = nw xmlrpc_client("/interface.php","ww.test.com",80);

 

相关方法:
send($message,30):向服务端发送$message,超时时间是30秒。
setDebug(int $level):设置是否输出调试信息,默认是0即不输出调试信息。$level1,打印服务端的HTTP头信息及XML信息。$level2,同时打印服务端和客户端的HTTP头信息及XML信息。
4.xmlrpcresp
该类主要包含XML-RPC请求返回的结果。Xmlrpc_clientsend方法返回该类型。

new  xmlrpcresp(xmlrpcval $val);//在服务端生成一个xmlrpcresp对象
new xmlrpcresp(0,int $errcode,string $err_string);//服务端出错时,可以返回该类型。

相关方法:
faultCode():客户端获取服务端返回的出错代码。
faultString():客户端获取服务端返回的出错信息。
Value():客户端获取服务端返回的值。
5.xmlrpc_server
服务端的基本类。

function test($xmlrpcval){
return new xmlrpcresp($val);
}

//客户端可以访问examples.myTest来实际访问test()函数
new xmlrpc_server(
array(
"examples.myTest"=>array("function"=>"test")
));

四,一个实际例子
假设服务度是my.rpcserver.com,提供服务的路径是interface.php,客户端是my.test.com.

在服务度的interface.php中:

<?php
include './lib/xmlrpc.inc';
include './lib/xmlrpcs.inc';

function foo($xmlrpcmsg){
$par1 = $xmlrpcmsg->getParam(0); //获取第一个参数
$val1 = $par1->scalarval(); //转换成PHP对应的值

$par2 = $xmlrpcmsg->getParam(1); //获取第二个参数
$val2 = $par2->scalarval(); //转换成PHP对应的值

$par3 = $xmlrpcmsg->getParam(2); //获取第二个参数

//转换成PHP对应的值

for($i=0; $i<$par3->arraySize(); $i++){
$v = $par3->arrayMem($i);
$val[] = $v->scalarVal()."<br>";
}

$msg1 = new xmlrpcval(strrev($val1),"string");
$msg2 = new xmlrpcval(strrev($val2),"int");

$msg = new xmlrpcval(array($msg1,$msg2),"array"); //返回一个array

return new xmlrpcresp($msg);
}

new xmlrpc_server(
array(
"example.test"=>array("function"=>"foo"),
)
);
?>

 

在客户端的client.php中:

<?php 
include './lib/xmlrpc.inc';
$params = array(
new xmlrpcval("hello rpc","string"),
new xmlrpcval(123,"int"),
new xmlrpcval(
array(
new xmlrpcval("test","string"),
new xmlrpcval(456,"int")
)
,
"array"),
);

$message = new xmlrpcmsg("example.test",$params);
$client = new xmlrpc_client("/interface.php", "my.rpcserver.com" ,'80');
//$client->setDebug(2);
$res = $client->send($message,30);

if(!$res->faultCode()){
$v= $res->value();
for($i=0; $i<$v->arraySize(); $i++){
$vv = $v->arrayMem($i);
echo $vv->scalarVal()."<br>";
}
}
else{
echo $res->faultcode().":".$res->faultString()."<br>";
}
?>

 


分享到:
评论

相关推荐

    2001_Programming Web Services with XML-RPC

    #### 二、XML-RPC简介 ##### 2.1 XML-RPC的功能 XML-RPC(XML Remote Procedure Call)是一种轻量级的协议,用于实现不同应用程序之间的远程过程调用。它通过HTTP协议传输XML格式的数据,在客户端和服务端之间交换...

    XML-RPC for PHP-开源

    XML-RPC(XML Remote Procedure Call)是一种通过网络调用远程函数的协议,它使用XML作为数据交换格式。在PHP中,XML-RPC的实现允许开发者创建可以与其他支持XML-RPC的平台(如Java、Python、Perl等)进行交互的Web...

    programming web services with xml rpc

    - **数据类型与API**:描述了在ASP中使用XML-RPC时涉及的数据类型及API。 - **构建地址簿Web服务**:提供了一个具体的示例——使用ASP创建一个简单的地址簿Web服务。 - **跨平台通信**:展示了如何通过XML-RPC让基于...

    xml-rpc 1.5.1

    The automatic base64 encoding can be turned on via the new XML_RPC_Client::setAutoBase64() method. The auto-encoding is a workaround for systems that don&apos;t have PHP&apos;s mbstring extension ...

    php XmlRPC 官方文档

    使用 XML-RPC for PHP 需要满足以下系统要求: - **操作系统**: 支持多种主流操作系统,包括但不限于 Windows、Linux 和 macOS。 - **PHP版本**: 需要 PHP 5.1 或更高版本。 - **其他依赖**: 不需要额外的库或扩展,...

    php-xml

    5. **SAX(Simple API for XML)解析**: SAX是一种事件驱动的解析器,不创建整个DOM树,而是按需处理XML元素。PHP的SAX解析器需要配合回调函数来处理事件,适用于处理大型XML文件,因为它占用的内存较少。 6. **...

    整合PHP和XML(CHM)

    SAX(Simple API for XML)是事件驱动的解析器,适用于处理大型XML文件,因为它不将整个文档加载到内存中。相比之下,DOM(Document Object Model)解析器会将整个XML文件转换为一个树形结构,便于遍历和修改。 2. ...

    用PHP操作XML(真逗,标题不够详细)

    3. **SAX(Simple API for XML)** SAX是一种事件驱动的XML解析器,适用于处理大型XML文档,因为它不需要一次性加载整个文档到内存。在PHP中,可以使用`SAXParser`类,定义事件处理器回调函数,如`startElement`, `...

    PHPRPC .Net服务端+客户端

    标签中的"PHPRPC For ."可能表示这个版本是专门为.NET环境设计的,这意味着它可以与其他.NET语言(如C#、VB.NET等)无缝集成。 在实际应用中,PHPRPC可以用于以下场景: 1. **混合架构**:在PHP和.NET项目并存的...

    整合PHP和XML

    Learn how to use SAX, XSLT, and XPath to manipulate XML documents, as well as use of XML-RPC protocol for accessing procedures on a remote computer, and much more

    PHP4XML

    - **SAX**(Simple API for XML):一种基于事件驱动的XML解析方式,适用于大文件或网络流的解析,因为它不需要将整个XML文档加载到内存中。 - **DOM**(Document Object Model):一种基于树状结构的XML解析方式,...

    phpxmlrpc-3.0.0 程序库

    It is a library implementing the XML-RPC protocol, written in PHP. It is also known as PHPXMLRPC. It is designed for ease of use, flexibility and completeness. High speed and reduced memory footprint ...

    PHP for Flash FMS网站开发手札.pdf

    数据交换是现代Web应用的核心之一,本书详细讲解了如何使用XML格式进行数据交换,尤其是在PHP与Flash之间的通信中。XML的结构化特性使得它成为跨平台数据交换的理想选择,而本书对这一主题的深入探讨,将帮助开发者...

    PHP Web 2.0 Mashup Projects.pdf

    we create an extensible object-oriented parser for XML. The mashup covered in this chapter integrates information taken from Amazon's E-commerce Service (ECS) with the Internet UPC database. In ...

    PHPweb服务器YACS.zip

    YACS 是一个强大的 PHP 脚本,可以让你维护一个动态的 Web 服务器。... RSS syndication- Easy installation- XML-RPC interface (implementing the Blogger API and metaWeblog API) 标签:YACS

    XML Processing with Perl, Python, and PHP (2002).pdf

    the way, I address some of the important protocols, such as SOAP and XML-RPC, that make seamless data transfer possible. Throughout this book you’ll find sample scripts. You can download the complete...

    emlog_forapp

    【标题】"emlog_forapp" 是...它通过XML-RPC接口支持远程操作,使用RSS订阅保持内容同步,并且可能具备自定义配置和多语言支持。安装和使用这个插件,可以让Emlog博主在移动设备上更加自如地管理和分享他们的博客内容。

    xml精讲帮助文档 两个打包

    2. SOAP(Simple Object Access Protocol):PHP可以使用XML构建SOAP服务,实现远程过程调用(RPC),允许不同系统间的Web服务交互。 五、XML与Flash 1. Flash ActionScript 3.0:Flash中的ActionScript 3.0可以...

    PHP实现webservice简单示例

    &lt;soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/&gt; &lt;soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace=...

    PHP手册简体中文版-2006年编译

    9. **XML与Web服务**:随着Web服务的普及,手册也涵盖了XML的解析和生成,以及SOAP、XML-RPC等相关技术。 10. **安全指南**:手册特别强调了安全问题,提供了防止SQL注入、XSS攻击等常见安全威胁的策略。 11. **...

Global site tag (gtag.js) - Google Analytics