巨好用的 xmlrpc-epi PHP 封装类 (1)

xml|封装

在 PHP 中本身带有一个用 C 语言实现的 xmlrpc 扩展,叫 xmlrpc-epi。因为它是用 C 语言实现的,所以从速度上来说比用 PHP 实现的那些 xmlrpc 扩展要快的多。但是在实际应用中却发现很少有人用这个扩展,大都是用 PHP 脚本实现的 xmlrpc 的扩展。原因可能有以下两点:一是这个扩展需要在服务器上打开,如果没有服务器操作权限,使用这个扩展就不现实了。第二个原因就是这个扩展在 PHP 手册中的说明太少了,而且提供的函数都很基础,要使用的话就很麻烦了。针对第二个问题,我对这个扩展进行了封装,将它封装成了3个类:xmlrpc_error、xmlrpc_client 和 xmlrpc_server。当然最主要的是后两个类,即 xmlrpc_client 和 xmlrpc_server。这两个类大大简化了创建 xmlrpc 客户端和服务器的步骤。

大家可以通过下面的实例来看一下现在创建 xmlrpc 服务器和客户端的步骤有多么简单。

服务器端代码
下载: server.php
<?php
require_once('class_xmlrpc.php');
 
function Add($method, $params) {
    return $params[0] + $params[1];
}
function Sub($method, $params) {
    return $params[0] - $params[1];
}
function Mul($method, $params) {
    return $params[0] * $params[1];
}
function Div($method, $params) {
    return $params[0] / $params[1];
}
 
$xmlrpc_server = new xmlrpc_server();
$xmlrpc_server->register_method("Math.add", "Add");
$xmlrpc_server->register_method("Math.sub", "Sub");
$xmlrpc_server->register_method("Math.Mul", "Mul");
$xmlrpc_server->register_method("Math.Div", "Div");
$xmlrpc_server->call_method();
?>
客户端代码
下载: client.php
<?php
require_once('class_xmlrpc.php');
 
$xmlrpc_client = new xmlrpc_client('server.php', 'Math');
$a = 100;
$b = 20;
echo "\$a = $a; \$b = $b <br />";
echo '$a + $b = ' . $xmlrpc_client->add($a, $b) . '<br />';
echo '$a - $b = ' . $xmlrpc_client->sub($a, $b) . '<br />';
echo '$a * $b = ' . $xmlrpc_client->call('Mul', $a, $b) . '<br />';
echo '$a / $b = ' . $xmlrpc_client->invoke('Math.Div', $a, $b) . '<br />';
?>
虽然上面的代码很简单,但是还是有两点需要注意的地方的。

第一,xmlrpc 的方法是支持名空间(namespace)的,为了简化调用——省略方法前面的名空间,我们在初始化 $xmlrpc_client 时,给出了一个名空间的参数“Math”,这样下面通过方法名直接调用或者通过call来调用方法时,就可以省略名空间前缀了。如果想要改变名空间,只要给 $xmlrpc_client->namespace 赋值就可以了。如果只是临时改变,也可以通过 invoke 方法来用全名(即带有名空间的方法名)来调用。

第二,xmlrpc 和 PHP5 的方法是区分大小写的,而 PHP4 的方法是不区分大小写的,而且在 PHP4 中,所有的函数或方法名都是储存为小写,因此不论是 add 也好,Sub 也好,最后它们所调用的方法都是小写的。所以 PHP5 中可以直接调用定义中有大写字母的方法,而 PHP4 中却不能。也就是说,如果想要在 PHP4 中直接通过方法名来访问 xmlrpc 方法的话,那么必须保证 xmlrpc 的方法名在定义时是小写的,否则就会产生找不到相应方法的错误。如果要在 PHP4 中调用在定义时就有大写字母的 xmlrpc 方法该怎么办呢?其实很简单,用 call 方法调用就可以了,第一个参数就是要调用的方法名的字符串,这个字符串是可以区分大小写的。也可以用 invoke 方法来调用,不同的地方就是如果有名空间的话,需要明确的写出来。

 

时间: 2024-11-02 16:27:21

巨好用的 xmlrpc-epi PHP 封装类 (1)的相关文章

招聘网站普遍巨亏调查:仅1%中小企业愿付费

中介交易 SEO诊断 淘宝客 云主机 技术大厅 "之所以出现这么巨额的亏损,主要是目前中国的市场还没有成熟."一位大型网络招聘公司的高层告诉记者,在中国目前4000万左右的中小企业中,只有几十万家公司(即约1%企业可能交费)会把网络作为招聘渠道,从它们身上取得的收入远远不能弥补高额的开支. 一次普通的搬家竟然引出一场恐慌. 6月底,北京建国路惠通时代广场,智联招聘总部办公区一派搬家景象.记者从北京建国路惠通时代广场看到,智联招聘的工作区内,到处是打包的行李,货柜箱.纸箱打着胶条待运,多

php递归获取目录内文件封装类分享

 php递归获取目录内文件封装类分享,可以递归子目录 代码如下:   代码如下: function readFileFromDir($dir) {     if (!is_dir($dir)) {         return false;     }     //打开目录     $handle = opendir($dir);     while (($file = readdir($handle)) !== false) {         //排除掉当前目录和上一个目录        

使用ADO封装类的数据库程序开发实例(下)

五.开始编写ADO应用程序. 使用ADO之前,我们另外还需要添加下面的语句,如此把ADO的库引入到工程中 . #import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF","adoEOF") 根据机器安装时候的设置不同具体的路径可能不一样. 另外编译的时候会出现如下的警告信息: msado15.tlh(405) : warning

详解XML-RPC和JAX-RPC

响应也是简单的XML文件,拥有根元素,或者有或者没有子元素.这与复杂的SOAP相应对比鲜明. 原先的XML-RPC协议是由Web先锋Dave Winer于1998年在UserLand Software公司发明的.其第一个实现是在UserLand Frontier开发平台上(事实上,UserLand Software的商标就是"XML-RPC")."在HTTP之上传输XML文本"方法的自然用途就是创建SOAP,这其中有Winer, Don Box以及其他微软公司人士的

Apache XML-RPC 教學文章+ 示範程式

apache|xml [主題]Apache XML-RPC 示範教學 (一) [目的]嘗試創作, 分享學習經驗 [下載連結]http://ws.apache.org/xmlrpc/download.html [簡介]Apache XML-RPC 為一組使用 Java 所寫成的 XML-RPC 套件, Apache XML-RPC 的類別分為 Client 端以及 Server 端兩大部分, 它是透過兩套廣為使用的協定 XML 以及 HTTP 來實作遠端程式呼叫. [使用教學 Client 篇]在

一条SQL语句变得巨慢的原因及其解决方法

现象:一条SQL突然运行的特别慢. select uidTable.column_value, first_name' ' last_name, company, job_title, upper(member_level), upper(service_value) from (select * from table(select cast(multiset (select b from bbb)as Taaa) from dual)) uidTable,member where uidTab

借助封装类实现线程调用带参方法

(一).描述      由于线程只能执行无参数方法. 有时候需要线程执行"带参数方法"      此示例演示怎样借助封装类实现"线程调用带参方法"(二).代码 本示例代码已经测试,能够正常运行! (三).示例下载  http://www.cnblogs.com/Files/ChengKing/ThreadExample.rar using System;using System.Threading; namespace 借助封装类实现_线程调用带参方法_{ clas

PHP炸死你,源码,巨有效

PHP炸死你,源码,巨有效 http://www.php100.com/uploadfile/2013/0830/20130830010035787.zip

XML-RPC 之 Apache XML-RPC 实例

apache|xml 作者:王恩建来源:http://www.sentom.netXML-RPC 是工作在 Internet 上的远程过程调用协议.通俗点讲,就是使用 HTTP 协议交互,交互的载体是 XML 文件.XML-RPC 具体的规范说 明请参考这里. 图片来自XML-RPC官方网站 XML-RPC 规范定义了六种数据类型,下表是这六种数据类型与 Java 的数据类型对应表. XML-RPCJava<i4> 或 <int>int<boolean>boolean&