杩???澶╁?ㄧ??浜?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",浣跨?ㄦ?规???宸ヤ?????,澶у??灏?寮???.