2011-04-02 52 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