1、Zend_XmlRpc介紹
1. Zend_XmlRpc_Server:
Zend_XmlRpc_Server 依照 ? www.xmlrpc.com 上的規(guī)格描寫(xiě) 實(shí)現(xiàn)了1個(gè)全功能 XML-RPC 服務(wù)器。同時(shí),它還實(shí)現(xiàn)了允許批量傳輸(boxcarring)的 system.multicall() 方法。
個(gè)人理解,Zend_XmlRpc_Server可以在PHP程序中輕松實(shí)現(xiàn)webservice接口的功能,所有對(duì)外部的接口都可以在server文件中定義(只添加對(duì)外開(kāi)發(fā)的接口),保證接口的安全性和程序的安全性。
2. Zend_XmlRpc_Client:
XML-RPC 服務(wù)的功能。主要功能包括在 PHP 和 XML-RPC 之間進(jìn)行類型的自動(dòng)轉(zhuǎn)換, 服務(wù)代理對(duì)象(a server proxy object),和訪問(wèn)服務(wù)器的自省功能 (introspection capabilities)。
個(gè)人理解,就是在其他PHP程序中使用之前程序定義的Zend_XmlRpc_Server里的接口時(shí)使用,可以輕松調(diào)用Zend_XmlRpc_Server里定義的接口。
2、Zend_XmlRpc使用
首先我們得創(chuàng)建1個(gè)sever類,名字自定義。比如:我現(xiàn)在在我的項(xiàng)目zend_fraemwork創(chuàng)建1個(gè)Myserver.php文件,如圖:
這個(gè)Myserver.php文件的位置隨意你放,只要是在application下(1般我會(huì)創(chuàng)建1個(gè)webservice文件夾,上圖為測(cè)試,所以隨意放的)。
Myserver.php文件代碼以下:
<?php require_once 'Zend/XmlRpc/Server.php'; require_once APPLICATION_PATH.'commonsendMail.php';//先引入項(xiàng)目下的1個(gè)要開(kāi)發(fā)出來(lái)的接口類
$server = new Zend_XmlRpc_Server(); $server->setClass('sendMail','test');//創(chuàng)建1個(gè)命名空間為test,然后把sendMail.php的sendMail全部類放入Zend_XmlRpc_Server作為對(duì)外的接口 echo $server->handle();//輸出處理要求結(jié)果 |
這樣就把全部sendMail.php 類都加入到了Zend_XmlRpc_Server中,也就是意味著,只要我在其他程序里用Zend_XmlRpc_Client創(chuàng)建對(duì)應(yīng)客戶端實(shí)例,就能夠用這個(gè)實(shí)例訪問(wèn)sendMail.php類里的所有方法。$server不但可以setClass,還可以addFunction,也就是只加入類里的某個(gè)方法。
看到這里,大家肯定迫不及待想要看看到底如何如其他程序去使用Zend_XmlRpc_Client來(lái)調(diào)用sendMail.php里的方法了,好的,先看看如何調(diào)用吧。
我新建1個(gè)項(xiàng)目名稱為:zend_fraemwork1,然后在default模塊下的IndexController里試試用Zend_XmlRpc_Client來(lái)調(diào)用了,結(jié)構(gòu)如圖:
從圖中可以看到,該項(xiàng)目下的common文件夾下根本沒(méi)有sendMail.php文件。且看我如何調(diào)用這個(gè)郵件發(fā)送類的發(fā)送方法。代碼以下:
$title="測(cè)試"; $body='<h1>這是1封來(lái)自MarkTao的測(cè)試PHP郵件發(fā)送郵件!</h1><a href="#">請(qǐng)確認(rèn)</a>'; $address = 'xxx@qq.com'; try{ $client = newZend_XmlRpc_Client('http://192.168.1.104/zend_fraemwork/public/common/Myserver.php'); //這是我本機(jī)的IP:192.168.1.104,兩個(gè)項(xiàng)目都在本機(jī)的站點(diǎn)下。根據(jù)url實(shí)例化Zend_XmlRpc_Client對(duì)象。 $test = $client->getProxy('test');// $test->__call(send, array($title, $body, $address));//調(diào)用__call方法調(diào)用sendMail.php類里的send方法,發(fā)送郵件。array是用來(lái)傳遞參數(shù)用的。 }catch (Zend_XmlRpc_Client_HttpException $ee){ $ee->getMessage(); } |
這樣,我們就成功的在項(xiàng)目zend_fraemwork1中調(diào)用了zend_fraemwork里的sendMail.php類里的send方法,實(shí)現(xiàn)了郵件發(fā)送功能。
3、總結(jié)
總結(jié)1下:首先,我們得保證兩個(gè)項(xiàng)目直接是可以通訊的,也就是說(shuō)網(wǎng)絡(luò)是通的;其次,我們得創(chuàng)建好提供外部統(tǒng)1訪問(wèn)的類,如上述的Myserver.php;然后我們的在該類中通過(guò)Zend_XmlRpc_Server對(duì)象把需要的類或方法set或add進(jìn)去,這樣在其他項(xiàng)目里就可以隨時(shí)使用Zend_XmlRpc_Client對(duì)象進(jìn)行訪問(wèn)了。
特別注意的是:在Myserver.php類里必須引入:
require_once 'Zend/XmlRpc/Server.php';
而在使用Zend_XmlRpc_Client對(duì)象的類里也必須使用:
require_once 'Zend/XmlRpc/Client.php';
最后,國(guó)際慣例,歡迎拍磚!