Õ⼸ÌìÒ»Ö±ÔÚÑо¿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³ÌÐòÊǷdz£µÄ¿ìËÙ·½±ã¡£
ÏÂÃæ¼¸¸öÊÇ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<$sz; $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.';
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µÄÖ§³ÖÊǷdz£µÄÍêÉÆµÄ£¡
×îºóÒ»µã£¬Í¬ÆäËûµÄÔ¶³Ìµ÷Óõĵ÷ÊÔÒ»Ñù£¬XMLRPCµÄPHP³ÌÐòµÄµ÷ÊԱȽϵÄÂé·³¡£ÐÒ¿÷xmlrpc-phpµÄÖ÷Ò³ÉÏÃæÌṩÁËÒ»¸öµ÷ÊÔXMLRPCµÄºÃµØ·½£¬Äã¿ÉÒÔ´ÓÕâÀï·ÃÎÊ¡£
×îÖ÷Òª°Ñ"show debug info"ÏÔʾµ÷µ½¡°More¡±£¬ÕâÑù¿ÉÒԷdz£ÈÝÒ×µÄÕÒµ½³ö´íÔÒò¡£
ÁíÍâÒ»µã£¬Èç¹ûÏë²âÊÔÒ»¸ö¶«Î÷£¬×îºÃ´Ó×î¼òµ¥µÄ¶«Î÷¿ªÊ¼£¬ÆäʵÎÞÂÛÊÇHelloWorld»¹ÊÇaddTwo¶¼ÊÇÒ»¸ö·Ç³£ºÃµÄÆðµã£¬Èç¹ûËûÃdzɹ¦ÁË£¬±íʾÄãµÄ³ÌÐòµÄ»ù´¡ÉèÖÃÊÇûÓÐÎÊÌâ¡£Èç¹ûºÍÎÒÒ»Ñù£¬ÂíÉϾÍдһ¸ö±È½Ï¸´ÔӵijÌÐòÀ´²âÊÔÒ»¸öÐÂÊÂÎÈç¹û²âÊÔ²»³É¹¦£¬µ½µ×ÊDzâÊÔ³ÌÐò±¾ÉíµÄ´íÎó»¹ÊÇ»ù´¡ÉèÖõĴíÎ󣬾ÍÏñһͷÂÒÂéÒ»Ñù£¬·Ö²»Çå³þÍ·Ð÷£¬ÕÒ²»µ½·½ÏòÁË¡£µ±È»Ò»¸ö±È½ÏºÃµÄµ÷ÊÔϵͳ£¬¿ÉÒԷdz£Çå³þÏÔʾÔËÐйý³Ì£¬¾ÍÌ«ºÃÁË¡£
Ã÷ÌìÔÙдÈçºÎÈÃÎÒµÄPHP Blog³ÌÐòÄܹ»½ÓÊÜDel.icio.usµÄ·¢²¼£¬Ò²Ð´Ò»ÏÂÈçºÎµ÷ÓÃLiveSpaceµÄMetaWeblog½Ó¿Ú¡£