log .= $message."\n"; } public function Run() { $renderer = new Renderer(); $this->log("------------------"); $this->log("Start request", 1, true); $data = array(); try { $result = $this->Call(); $data["result"][$this->func] = $result; } catch (WebException $e) { $data["error"]["code"] = $e->getCode(); $data["error"]["reason"] = $e->getMessage(); $data["error"]["name"] = $e->getName(); $this->status = 400; $this->log(sprintf("Error : [%s] %s", $e->getCode(), $e->getName())); } catch (\Exception $e) { $data["failure"]["code"] = $e->getCode(); $data["failure"]["reason"] = $e->getMessage(); $this->status = 500; $this->log(sprintf("Failure : %s", $e->getMessage())); } $this->log("Data: ".print_r($data, true), 2); $renderer->render($this->status, $data); $this->log("Request finished", 1, true); $this->log("------------------\n\n"); if(Configuration::get('log.verbosity') > 0) { file_put_contents(Configuration::get('log.file'), $this->log, FILE_APPEND | LOCK_EX); } } private function Call() { session_save_path(Configuration::get('session.save_path')); session_start(); $params = empty($_GET) ? $_POST : $_GET; if (empty($params)) { throw new UsageException("CallArgument", "arguments error", -1); } if (!array_key_exists("func", $params)) { throw new UsageException("CallArgFunction", "no 'func' specified", -2); } $this->func = $params["func"]; unset($params['func']); if (!is_callable(array($this, $this->func))) { throw new UsageException("CallFunction", "'func' method not available", -3); } $rm = new \ReflectionMethod($this, $this->func); $nbParams = count($params); $nbArgsFix = $rm->getNumberOfRequiredParameters(); $nbArgs = $rm->getNumberOfParameters(); /* Check the number of arguments. */ if ($nbParams < $nbArgsFix) { throw new UsageException("CallArgNumber", "you must provide at least " . $nbArgsFix . " arguments", 4); } if ($nbParams > $nbArgs) { throw new UsageException("CallArgNumber", "you must provide at most " . $nbArgs . " arguments", 4); } $this->log("Calling '".$this->func."'"); $this->log("Params: ".print_r($params, true), 2); return call_user_func_array(array($this, $this->func), $params); } }