2011-04-02 57 views
2

远程服务器通过RPC将XML发布到我的服务器。当我打开mod安全性时,我可以在Apache日志中看到XML,但是我无法从我的PHP脚本访问XML。它应该是一个POST请求,但$ _POST数组是空的。如何从PHP访问XML-RPC数据?

我的理解是RPC应该用数据调用我的函数,但似乎没有发生。

这可笑的简单脚本应该写XML日志文件,但它什么都不做:

 
include_once('xmlrpc/xmlrpc.inc'); 
include_once('xmlrpc/xmlrpcs.inc'); 

function ImportOrders($xml) 
{ 
    $FH=fopen('Log/In.txt','a'); 
    fwrite($FH,'Package recieved:'.print_r($xml,true)."\n"); 

    // set appropriate response code 
    $response = 0; // see defined response codes for this application 
    // send success or failure response code 
    if($response == 0) 
     return new xmlrpcresp(new xmlrpcval($response, "string")); 
    else 
     return new xmlrpcresp(0, $response, $error_message); 
} 

$Server = new xmlrpc_server(
    array("ImportOrders"=>array("function"=>"ImportOrders") 
    ) 
); 

他们给我这样的:

<?xml version="1.0" encoding="ISO-8859-1" ?> 
<methodCall> 
<methodName>ImportOrders</methodName> 
<params> 
<param> 
<value><int>2</int></value> 
</param> 
<param> 
<value><struct> 
<member><name>order_0</name> 
<value><struct> 
<member><name>order_id</name> 
.... 

为什么我的函数被调用?!?

回答

2

Got it!显然数据在“$ GLOBALS ['HTTP_RAW_POST_DATA']”中。

 
require 'kd_xmlrpc.php'; 
$xmlrpc_request = XMLRPC_parse($GLOBALS['HTTP_RAW_POST_DATA']); 
$methodName = XMLRPC_getMethodName($xmlrpc_request);  
$params = XMLRPC_getParams($xmlrpc_request);  

ImportOrders($params); 

function ImportOrders($params) 
{ 
    $FH=fopen('Log/In.txt','a'); 
    fwrite($FH,'OrderDataRes has been loaded.'."\n"); 
    fwrite($FH,'$params: '.print_r($params,true)."\n"); 
} 

我还使用一个不同的充库,来自: http://www.keithdevens.com/software/xmlrpc/source.php