コード例 #1
0
ファイル: index.php プロジェクト: WesamMikhail/Arcane
use Lorenum\Arcane\Logs\Logger;
use Lorenum\Arcane\Response\JSONResponse;
use Lorenum\Arcane\Request\Request;
use Lorenum\Arcane\Planner\ExecutionPlan;
use Lorenum\Arcane\Database\ConnectionContainer;
use Lorenum\Arcane\Logs\LoggerFileStorage;
use Pimple\Container;
$container = new Container();
$container["configs"] = function ($self) {
    return new Configs("./configs.json");
};
$container["logger"] = function ($self) {
    return new Logger(new LoggerFileStorage("logs.log"));
};
$container["request"] = function ($self) {
    return Request::parseFromGlobals();
};
$container["response"] = function ($self) {
    return new JSONResponse();
};
$container["DBContainer"] = function ($self) {
    return new ConnectionContainer();
};
\Lorenum\Arcane\Errors\ErrorHandler::registerErrorHandlers($container);
$container["logger"]->addLog("Request", $container["request"]);
$planner = new ExecutionPlan($container);
$planner->addTask("DBConnection", new \Lorenum\Arcane\Planner\Tasks\DBConnectionTask\DBConnectionTask());
$planner->addTask("Routing", new \Lorenum\Arcane\Planner\Tasks\RoutingTask\RoutingTask());
$planner->addTask("ProcedureRunner", new \Lorenum\Arcane\Planner\Tasks\ProcedureRunnerTask\ProcedureRunnerTask());
$planner->run();
$container["logger"]->addLog("Response", $container["response"]);
コード例 #2
0
ファイル: Request.php プロジェクト: WesamMikhail/Arcane
 public static function parseFromGlobals()
 {
     //Parse the URI relative to SCRIPT. This is done because you could be on virtual hosting and we only want
     //The URI relative to the index.php script (the front controller)
     $path = "";
     $uri = explode("/", rtrim(parse_url($_SERVER["REQUEST_URI"], PHP_URL_PATH), "/"));
     //Remove trailing slash
     $script = explode("/", $_SERVER["SCRIPT_NAME"]);
     foreach ($script as $position => $fragment) {
         if (isset($uri[$position]) && strtolower($uri[$position]) == strtolower($fragment)) {
             $path .= $fragment;
             unset($uri[$position]);
             unset($script[$position]);
         }
     }
     //Disallow empty URI fragments such as: /user//profile. In other words, two backslashes cannot follow each other
     foreach ($uri as $fragment) {
         if (empty($fragment) && $fragment != 0) {
             throw new HTTPException_400();
         }
     }
     $request = new Request();
     $request->setPath("/" . $path);
     $request->setUri("/" . implode("/", $uri));
     $request->setScript("/" . implode("/", $script));
     $request->setMethod(strtoupper($_SERVER["REQUEST_METHOD"]));
     $request->setDomain($_SERVER["HTTP_HOST"]);
     $request->setQuery($_GET);
     $request->setProtocol($_SERVER['SERVER_PROTOCOL']);
     //Get the IP - Guess at best
     if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
         $request->setIp($_SERVER['HTTP_CLIENT_IP']);
     } else {
         if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
             $request->setIp($_SERVER['HTTP_X_FORWARDED_FOR']);
         } else {
             $request->setIp($_SERVER['REMOTE_ADDR']);
         }
     }
     //Set headers.
     $headers = Request::getGlobalHeaders();
     $request->setHeaders($headers);
     //The request body is set to POST
     $request->setBody($_POST);
     //But we override it if content-type is application/json by reading the raw 'php://input'.  $HTTP_RAW_POST_DATA is deprecated and that's why we do this!
     if (($request->getMethod() == "POST" || $request->getMethod() == "PUT") && isset($headers["Content_Type"]) && strpos($headers["Content_Type"], "application/json") !== false) {
         $request->setBody(json_decode(file_get_contents('php://input'), true));
     }
     return $request;
 }