将wordpress的xml-rpc移植到CodeIgniter内
第一次原创技术文章……先感慨一下原来做项目一直是使用wordpress框架,感觉省事,而且需要考虑的东西少之又少。但是在深入开发时就发现,wordpress太庞大了,不适合做更多扩展,于是现在转战敏捷PHP框架CodeIgniter。
做多平台合作开发时使用的是wordpress的xml-rpc支持,功能挺完善,而且是标准的xml-rpc,所以手机端向web端请求一直是以这个标准打包,但是现在使用CI后发现,它虽然支持xmlrpc,但是根本不解析wp下的xml请求,这样如果放弃WP方式,就可能导致手机端代码重编,所以只好想办法解决这个问题。看CI代码看的头疼,图省事直接移植WP的xmlrpc包。
CI版本是2.0,WP版本是3.2.1,首先将WP的class-IXR.php改名叫IXR_Server.php(这个因为CI的类需要像JAVA那样,主类和文件同名),然后将其直接拷贝到application/libraries下,留待使用。
接下来就是关键了,要调用IXR_Server中的函数,必须得将它实例化,使用CI的方式为:
$this->load->library('IXR_Server');
但是这样做是不成功的,因为在此之前还没有将methods导入,接下来就有两种方式了,一种是直接在这里传递参数,直接实例化,但是其函数的实现就必须写在IXR_Server里,简洁性和扩展性非常差。令一种方式就是,先创建一个类继承IXR_Server,然后在它里面实现函数扩展,再通过load实例化这个类,这样就可以不用修改IXR_Server中的代码,等WP升级的时候,可以直接COPY更新~
application/libraries/Xmlrpc_Methods.php代码如下:
<?php
require_once 'IXR_Server.php';
class Xmlrpc_Methods extends IXR_Server {
var $methods;
function __construct() {
$this->methods = array ('hello' => 'this:sayhello', 'addTwo' => 'this:addTwo' );
parent::__construct ( $this->methods );
}
function sayhello() {
return "Hello";
}
function addTwo($args) {
return $args + $args ;
}
}
?>
application/controller/Xmlrpc.php代码如下:
<?php
class Xmlrpc extends CI_Controller {
function __construct(){
parent::__construct();
}
function index()
{
//获取传入的内容
if ( !isset( $HTTP_RAW_POST_DATA ) ) {
$HTTP_RAW_POST_DATA = file_get_contents( 'php://input' );
}
if ( isset($HTTP_RAW_POST_DATA) )
$HTTP_RAW_POST_DATA = trim($HTTP_RAW_POST_DATA);
$this->load->library('Xmlrpc_Methods');
}
}
?>
然后在XML的rpc_url填写controller的xmlrpc调用就好,如果改过路由的可以参考我的:
$rpc_url = "http://localhost/CodeIgniter/Xmlrpc";
这样就大功告成啦!
其实挺简单,但是对PHP的面向对象不是非常了解,所以其中有些东西改了好几个小时……可见基础知识还是要扎实啊…… http://codeigniter.org.cn/user_guide/libraries/xmlrpc.html lamtin 发表于 2012-1-17 17:09 static/image/common/back.gif
http://codeigniter.org.cn/user_guide/libraries/xmlrpc.html
我们是手机端和WEB端交互,CI自带的还需要改手机端代码,所以才选用移植~
页:
[1]