router.php
资源名称:ext-3.0.0.zip [点击查看]
上传用户:shuoshiled
上传日期:2018-01-28
资源大小:10124k
文件大小:2k
源码类别:
中间件编程
开发平台:
JavaScript
- <?php
- require('config.php');
- class BogusAction {
- public $action;
- public $method;
- public $data;
- public $tid;
- }
- $isForm = false;
- $isUpload = false;
- if(isset($HTTP_RAW_POST_DATA)){
- header('Content-Type: text/javascript');
- $data = json_decode($HTTP_RAW_POST_DATA);
- }else if(isset($_POST['extAction'])){ // form post
- $isForm = true;
- $isUpload = $_POST['extUpload'] == 'true';
- $data = new BogusAction();
- $data->action = $_POST['extAction'];
- $data->method = $_POST['extMethod'];
- $data->tid = isset($_POST['extTID']) ? $_POST['extTID'] : null; // not set for upload
- $data->data = array($_POST, $_FILES);
- }else{
- die('Invalid request.');
- }
- function doRpc($cdata){
- global $API;
- try {
- if(!isset($API[$cdata->action])){
- throw new Exception('Call to undefined action: ' . $cdata->action);
- }
- $action = $cdata->action;
- $a = $API[$action];
- doAroundCalls($a['before'], $cdata);
- $method = $cdata->method;
- $mdef = $a['methods'][$method];
- if(!$mdef){
- throw new Exception("Call to undefined method: $method on action $action");
- }
- doAroundCalls($mdef['before'], $cdata);
- $r = array(
- 'type'=>'rpc',
- 'tid'=>$cdata->tid,
- 'action'=>$action,
- 'method'=>$method
- );
- require_once("classes/$action.php");
- $o = new $action();
- $params = isset($cdata->data) && is_array($cdata->data) ? $cdata->data : array();
- $r['result'] = call_user_func_array(array($o, $method), $params);
- doAroundCalls($mdef['after'], $cdata, $r);
- doAroundCalls($a['after'], $cdata, $r);
- }
- catch(Exception $e){
- $r['type'] = 'exception';
- $r['message'] = $e->getMessage();
- $r['where'] = $e->getTraceAsString();
- }
- return $r;
- }
- function doAroundCalls(&$fns, &$cdata, &$returnData=null){
- if(!$fns){
- return;
- }
- if(is_array($fns)){
- foreach($fns as $f){
- $f($cdata, $returnData);
- }
- }else{
- $fns($cdata, $returnData);
- }
- }
- $response = null;
- if(is_array($data)){
- $response = array();
- foreach($data as $d){
- $response[] = doRpc($d);
- }
- }else{
- $response = doRpc($data);
- }
- if($isForm && $isUpload){
- echo '<html><body><textarea>';
- echo json_encode($response);
- echo '</textarea></body></html>';
- }else{
- echo json_encode($response);
- }