远程服务器通过RPC将XML发布到我的服务器。当我启用mod安全性时,我可以在Apache日志中看到XML,但是我无法从PHP脚本访问XML。它应该是一个POST请求,但是$ _POST数组是空的。
我的理解是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>
....
为什么不调用我的函数?!?
答案 0 :(得分:2)
知道了!显然,数据位于“$ 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