天天看点

php5中XML-RPC函数的使用

杩???澶╁?ㄧ??浜?zend php5 code contest??姣?璧??峰?浣???,??浜???涓????充?web?舵???归?㈢???峰?浣???,????棰?娣?xml??php缁???搴??ㄨ??ュ?浜?,???㈠??涔???????浣????ㄨ?捐?′??界?ㄥ?颁?xml杩?涓?涓?瑗?....-_-! ???戒?浜?涓?灏?. 寤鸿??????浠??藉?荤????. ??浠ヨ??宸辫???澶╁?ㄧ??????瀛??php??xml缁??????稿?崇?ヨ??.

杩??朵腑灏遍???颁?XML-RPC???? ?ㄧ?涓???浠ユ?惧?扮??璧???涓?澶?, ??涓?澶у??伴?芥???ㄤ??朵?绗?涓??圭??hp寮?????XML-RPC class, ????hp5??甯???xmlrpc?芥????????璇?楠?妯″??)??濂藉??灏变?澶?浜?, 浣???涓?浜鸿???姣?杈???娆㈠??????涓?瑗?灏辫??宸辩??绌朵?涓?涓?.

?ㄦ????涓???浜烘??渚?浜?涓?涓?渚?瀛?,浣???涓?????涓???, 骞朵?娌℃????璇??ㄥ?㈡?风??杩???缁???????涔?澶???杩?涓?缁???. ??宸辫??????澶╃?浜??????戒?,?跺????浠ュ?杞绘?捐?╀?????涓???, 骞朵???涔?涓???瑕???浠讳?棰?澶???宸ヤ?.

涓??㈡??浠????ョ??渚?瀛?(??浠ュ?ㄦ????涓??惧??:

<?php

function do_call($host, $port, $request) {

??

?? $fp = fsockopen($host, $port, $errno, $errstr);

?? $query = "POST /servertest.php HTTP/1.0/nUser_Agent: My Egg Client/nHost: ".$host."/nContent-Type: text/xml/nContent-Length: ".strlen($request)."/n/n".$request."/n";

?? if (!fputs($fp, $query, strlen($query))) {

?????? $errstr = "Write error";

?????? return 0;

?? }

?? $contents = '';

?? while (!feof($fp)) {

?????? $contents .= fgets($fp);

?? }

?? fclose($fp);

?? return $contents;

}

$host = 'localhost';

$port = 80;

$request = xmlrpc_encode_request('cycle', 'egg');

$response = do_call($host, $port, $request);

?>

<?php

function lifecycle($method, $params) {

?? switch($params[0]) {

?????? case 'egg':

?????????? $reply = 'All eggs will be birds one day.';

?????? break;

?????? default:

?????????? $reply = 'That must have been an otheregg';

?? }

?? return $reply;

}

$server = xmlrpc_server_create();

xmlrpc_server_register_method($server, "cycle", "lifecycle");

$request = $HTTP_RAW_POST_DATA; // no you don't need 'always on', and no $_POST doesn't work.

$response = xmlrpc_server_call_method($server, $request, null);

header('Content-Type: text/xml');

print $response;

xmlrpc_server_destroy($server);

?>

杩?涓?渚?瀛?涓?瀹㈡?风??寰???response??娌℃??浣?浠讳???澶???,杩?涓?杩????兼??杩?涓??峰????瀛?绗?覆:

HTTP/1.1 200 OK

Date: Thu, 04 Nov 2004 08:21:43 GMT

Server: Apache/2.0.47 (Win32) PHP/5.0.1

X-Powered-By: PHP/5.0.1

Connection: close

Content-Type: text/xml;charset=GB2312

<?xml version="1.0" encoding="iso-8859-1"?>

<methodResponse>

<params>

?<param>

? <value>

?? <string>All eggs will be birds one day.</string>

? </value>

?</param>

</params>

</methodResponse>

杩?涓?瀛?绗?覆????浜?涓や釜?ㄥ??,涓?涓???html??澶翠俊??,涓?涓???xml-rpc????浠?瀵逛?绋?寰?杩?琛?涓?涓?澶???灏卞??浠ユ弧瓒虫??浠???瑕?姹?浜?.

?

涓??㈢??????淇??硅???渚?瀛?,涓昏??ㄤ?涓?涓?xmlrpc_decode?芥??缃?涓?娌℃???惧?拌?存??,??宸辫??浜???澶???璇??烘?ヤ????ㄦ?:

<?php

function do_call($host, $port, $request) {

?? $fp = fsockopen($host, $port, $errno, $errstr);

?? $query = "POST /servertest.php HTTP/1.0/nUser_Agent: My Egg Client/nHost: ".$host."/nContent-Type: text/xml/nContent-Length: ".strlen($request)."/n/n".$request."/n";

?? if (!fputs($fp, $query, strlen($query))) {

?????? $errstr = "Write error";

?????? return 0;

?? }

?? $contents = '';

?? while (!feof($fp)) {

?????? $contents .= fgets($fp);

?? }

?? fclose($fp);

?? return $contents;

}

$host = 'localhost';

$port = 80;

$request = xmlrpc_encode_request('cycle', 'egg');

$response = do_call($host, $port, $request);

$pos = strpos($response,? '<?xml');

$str = substr($response, $pos);

$tmp = xmlrpc_decode($str);

print_r($tmp);

?>

?

<?php

function lifecycle($method, $params) {

?? switch($params[0]) {

?????? case 'egg':

?????????? $reply[] = 'All eggs will be birds one day.??甯?濂戒汉';

?????????? $reply[] = 'All eggs will be birds one day.??甯?濂戒汉aaaaa';

?????? break;

?????? default:

?????????? $reply[] = 'That must have been an otheregg??甯?濂戒汉';

?? }

?? return $reply;

}

$server = xmlrpc_server_create();

xmlrpc_server_register_method($server, "cycle", "lifecycle");

$request = $HTTP_RAW_POST_DATA; // no you don't need 'always on', and no $_POST doesn't work.

$response = xmlrpc_server_call_method($server, $request, null);

header('Content-Type: text/xml');

print ($response);

xmlrpc_server_destroy($server);

?>

杩?琛?涓?涓?,?????剧ず???扮????峰?,杩??峰???璧锋?ュ氨????澶?浜?.

???戒?杩?涓?,???茬??,????php5??甯???"SOAP Functions",浣跨?ㄦ?规???宸ヤ?????,澶у??灏?寮???.