Merge branch 'master' of https://git.xdrm.io/ptut/vhost
This commit is contained in:
commit
e977da1636
|
@ -0,0 +1,31 @@
|
||||||
|
<?php
|
||||||
|
/**************************
|
||||||
|
* API AuthSystem *
|
||||||
|
* 08-12-2016 *
|
||||||
|
***************************
|
||||||
|
* Designed & Developed by *
|
||||||
|
* xdrm-brackets *
|
||||||
|
***************************
|
||||||
|
* https://xdrm.io/ *
|
||||||
|
**************************/
|
||||||
|
|
||||||
|
namespace api\core;
|
||||||
|
|
||||||
|
use \error\core\Err;
|
||||||
|
use \error\core\Error;
|
||||||
|
|
||||||
|
class AuthSystemDefault implements AuthSystem{
|
||||||
|
|
||||||
|
/* VERIFICATION DES ACCES EN FONCTION DE PERMISSIONS ATTENDUES
|
||||||
|
*
|
||||||
|
* @expected<array> Liste des permissions attendues
|
||||||
|
*
|
||||||
|
* @return error<Error> Erreur associée à la permission (Success/PermissionError/TokenError/etc)
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public static function permission($expected){
|
||||||
|
return new Error(Err::Success);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
|
@ -0,0 +1,112 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
|
||||||
|
namespace error\core;
|
||||||
|
|
||||||
|
|
||||||
|
class Err{
|
||||||
|
/* [1] Success
|
||||||
|
=========================================================*/
|
||||||
|
const Success = 0;
|
||||||
|
|
||||||
|
|
||||||
|
/* [2] Fichiers / Ressources
|
||||||
|
=========================================================*/
|
||||||
|
/* (1) Parsage json/xml */
|
||||||
|
const ParsingFailed = 1;
|
||||||
|
/* (2) Fichier inexistant */
|
||||||
|
const UnreachableResource = 2;
|
||||||
|
/* (3) Erreur d'upload */
|
||||||
|
const UploadError = 3;
|
||||||
|
/* (4) Mauvais format de fichier */
|
||||||
|
const FormatError = 4;
|
||||||
|
|
||||||
|
|
||||||
|
/* [3] Permissions
|
||||||
|
=========================================================*/
|
||||||
|
/* (1) Token inexistant ou incorrect */
|
||||||
|
const TokenError = 5;
|
||||||
|
/* (2) Permission non autorisée */
|
||||||
|
const PermissionError = 6;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* [4] API
|
||||||
|
=========================================================*/
|
||||||
|
/* (1) Le module n'est pas activé */
|
||||||
|
const DisabledModule = 7;
|
||||||
|
|
||||||
|
/* (2) Le @path n'est pas renseigne */
|
||||||
|
const MissingPath = 8;
|
||||||
|
/* (3) Verification de la coherence du chemin (existe dans la conf) */
|
||||||
|
const WrongPathModule = 9;
|
||||||
|
|
||||||
|
/* (4) Module non specifie dans la conf */
|
||||||
|
const UnknownModule = 10;
|
||||||
|
/* (5) Methode non specifie pour ce Module dans la conf */
|
||||||
|
const UnknownMethod = 11;
|
||||||
|
|
||||||
|
/* (6) Module non amorcable */
|
||||||
|
const UncallableModule = 12;
|
||||||
|
/* (7) Methode non amorcable */
|
||||||
|
const UncallableMethod = 13;
|
||||||
|
|
||||||
|
/* (8) Erreur méthode HTTP */
|
||||||
|
const UnknownHttpMethod = 14;
|
||||||
|
|
||||||
|
/* (9) Erreur de configuration */
|
||||||
|
const ConfigError = 15;
|
||||||
|
/* (10) Paramètre manquant */
|
||||||
|
const MissingParam = 16;
|
||||||
|
/* (11) Paramètre incorrect */
|
||||||
|
const WrongParam = 17;
|
||||||
|
/* (12) Erreur dans le traitement */
|
||||||
|
const ModuleError = 18;
|
||||||
|
|
||||||
|
|
||||||
|
/* [5] Database
|
||||||
|
=========================================================*/
|
||||||
|
/* (1) Base de données
|
||||||
|
---------------------------------------------------------*/
|
||||||
|
/* (1) Erreur lors de la creation d'un objet PDO (connection) */
|
||||||
|
const PDOConnection = 19;
|
||||||
|
|
||||||
|
/* (2) Repositories
|
||||||
|
---------------------------------------------------------*/
|
||||||
|
/* (1) Verification de la coherence du chemin (existe dans la conf) */
|
||||||
|
const WrongPathRepo = 20;
|
||||||
|
|
||||||
|
/* (2) Module non specifie dans la conf */
|
||||||
|
const UnknownRepo = 21;
|
||||||
|
|
||||||
|
/* (3) Erreur dans le traitement */
|
||||||
|
const RepoError = 22;
|
||||||
|
|
||||||
|
/* (3) ORM
|
||||||
|
---------------------------------------------------------*/
|
||||||
|
/* (1) Table n'existe pas */
|
||||||
|
const UnknownTable = 23;
|
||||||
|
/* (2) Pas permissions de lire le schéma */
|
||||||
|
const NotAllowedSchema = 24;
|
||||||
|
|
||||||
|
|
||||||
|
/* [6] Erreurs diverses
|
||||||
|
=========================================================*/
|
||||||
|
/* (1) Aucune donnée trouvée */
|
||||||
|
const NoMatchFound = 25;
|
||||||
|
|
||||||
|
/* (2) Mauvais chemin de template */
|
||||||
|
const UnknownTemplate = 26;
|
||||||
|
|
||||||
|
/* (3) géolocalisation échouée */
|
||||||
|
const UnknownAddress = 27;
|
||||||
|
|
||||||
|
/* (4) Erreur inconnue */
|
||||||
|
const UnknownError = 28;
|
||||||
|
|
||||||
|
/* (5) Entrée existante */
|
||||||
|
const AlreadyExists = 29;
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
|
@ -0,0 +1,197 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
|
||||||
|
namespace error\core;
|
||||||
|
|
||||||
|
use \error\core\Err;
|
||||||
|
|
||||||
|
class Error{
|
||||||
|
|
||||||
|
private $error = null;
|
||||||
|
private $arguments = [];
|
||||||
|
|
||||||
|
/* ERROR CONSTRUCTOR
|
||||||
|
*
|
||||||
|
* @error<const> Const error
|
||||||
|
* @arg1<String> [OPT] Argument 1
|
||||||
|
* @arg2<String> [OPT] Argument 2
|
||||||
|
* @arg...<String> [OPT] Argument ...
|
||||||
|
*
|
||||||
|
* @return instance<Error> Error instance
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function __construct($const){
|
||||||
|
call_user_func_array([$this, 'set'], func_get_args());
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ERROR GETTER
|
||||||
|
*
|
||||||
|
* @return Err<Err::Constant> Error
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function get(){ return $this->error; }
|
||||||
|
|
||||||
|
/* ERROR SETTER
|
||||||
|
*
|
||||||
|
* @error<const> Const error
|
||||||
|
* @arg1<String> [OPT] Argument 1
|
||||||
|
* @arg2<String> [OPT] Argument 2
|
||||||
|
* @arg...<String> [OPT] Argument ...
|
||||||
|
*
|
||||||
|
* @return instance<Error> Error instance
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function set($const){
|
||||||
|
/* [1] On découpe les arguments
|
||||||
|
=========================================================*/
|
||||||
|
/* (1) On récupère l'erreur */
|
||||||
|
$this->error = !is_numeric($const) ? Err::UnknownError : $const;
|
||||||
|
|
||||||
|
/* (2) On récupère les arguments */
|
||||||
|
$this->arguments = array_slice(func_get_args(), 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* EXPLICITE UN CODE D'ERREUR
|
||||||
|
*
|
||||||
|
* @return explicit<String> Description explicite du code d'erreur
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function explicit(){
|
||||||
|
switch($this->error){
|
||||||
|
case Err::Success: return $this->Success(); break;
|
||||||
|
case Err::ParsingFailed: return $this->ParsingFailed(); break;
|
||||||
|
case Err::UnreachableResource: return $this->UnreachableResource(); break;
|
||||||
|
case Err::UploadError: return $this->UploadError(); break;
|
||||||
|
case Err::FormatError: return $this->FormatError(); break;
|
||||||
|
case Err::TokenError: return $this->TokenError(); break;
|
||||||
|
case Err::PermissionError: return $this->PermissionError(); break;
|
||||||
|
case Err::DisabledModule: return $this->DisabledModule(); break;
|
||||||
|
case Err::MissingPath: return $this->MissingPath(); break;
|
||||||
|
case Err::WrongPathModule: return $this->WrongPathModule(); break;
|
||||||
|
case Err::UnknownModule: return $this->UnknownModule(); break;
|
||||||
|
case Err::UnknownMethod: return $this->UnknownMethod(); break;
|
||||||
|
case Err::UncallableModule: return $this->UncallableModule(); break;
|
||||||
|
case Err::UncallableMethod: return $this->UncallableMethod(); break;
|
||||||
|
case Err::UnknownHttpMethod: return $this->UnknownHttpMethod(); break;
|
||||||
|
case Err::ConfigError: return $this->ConfigError(); break;
|
||||||
|
case Err::MissingParam: return $this->MissingParam(); break;
|
||||||
|
case Err::WrongParam: return $this->WrongParam(); break;
|
||||||
|
case Err::ModuleError: return $this->ModuleError(); break;
|
||||||
|
case Err::PDOConnection: return $this->PDOConnection(); break;
|
||||||
|
case Err::WrongPathRepo: return $this->WrongPathRepo(); break;
|
||||||
|
case Err::UnknownRepo: return $this->UnknownRepo(); break;
|
||||||
|
case Err::RepoError: return $this->RepoError(); break;
|
||||||
|
case Err::UnknownTable: return $this->UnknownTable(); break;
|
||||||
|
case Err::NotAllowedSchema: return $this->NotAllowedSchema(); break;
|
||||||
|
case Err::NoMatchFound: return $this->NoMatchFound(); break;
|
||||||
|
case Err::UnknownTemplate: return $this->UnknownTemplate(); break;
|
||||||
|
case Err::UnknownAddress: return $this->UnknownAddress(); break;
|
||||||
|
case Err::UnknownError: return $this->UnknownError(); break;
|
||||||
|
case Err::AlreadyExists: return $this->AlreadyExists(); break;
|
||||||
|
|
||||||
|
default: return $this->UnknownDebugError(); break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private function Success(){
|
||||||
|
return 'all right';
|
||||||
|
}private function ParsingFailed(){
|
||||||
|
if( count($this->arguments) > 0 )
|
||||||
|
return $this->arguments[0].' parsing failed';
|
||||||
|
else
|
||||||
|
return 'parsing failed';
|
||||||
|
}private function UnreachableResource(){
|
||||||
|
return 'unreachable resource';
|
||||||
|
}private function UploadError(){
|
||||||
|
return 'upload error';
|
||||||
|
}private function FormatError(){
|
||||||
|
return 'format error';
|
||||||
|
}private function TokenError(){
|
||||||
|
return 'bad or expired token';
|
||||||
|
}private function PermissionError(){
|
||||||
|
if( count($this->arguments) > 0 )
|
||||||
|
return "missing permission: '".$this->arguments[0]."'";
|
||||||
|
else
|
||||||
|
return 'permission error';
|
||||||
|
}private function DisabledModule(){
|
||||||
|
return 'disabled module';
|
||||||
|
}private function MissingPath(){
|
||||||
|
return 'missing path';
|
||||||
|
}private function WrongPathModule(){
|
||||||
|
return 'wrong module\'s path';
|
||||||
|
}private function UnknownModule(){
|
||||||
|
if( count($this->arguments) > 0 )
|
||||||
|
return 'unknown module \''.$this->arguments[0].'\'';
|
||||||
|
else
|
||||||
|
return 'unknown module';
|
||||||
|
}private function UnknownMethod(){
|
||||||
|
if( count($this->arguments) > 0 )
|
||||||
|
return 'unknown method \''.$this->arguments[0].'\'';
|
||||||
|
else
|
||||||
|
return 'unknown method';
|
||||||
|
}private function UncallableModule(){
|
||||||
|
if( count($this->arguments) > 0 )
|
||||||
|
return 'uncallable module \''.$this->arguments[0].'\'';
|
||||||
|
else
|
||||||
|
return 'uncallable module';
|
||||||
|
}private function UncallableMethod(){
|
||||||
|
if( count($this->arguments) > 0 )
|
||||||
|
return 'uncallable method \''.$this->arguments[0].'\'';
|
||||||
|
else
|
||||||
|
return 'uncallable method';
|
||||||
|
}private function UnknownHttpMethod(){
|
||||||
|
return 'unknown HTTP method';
|
||||||
|
}private function ConfigError(){
|
||||||
|
return 'configuration error';
|
||||||
|
}private function MissingParam(){
|
||||||
|
if( count($this->arguments) > 0 )
|
||||||
|
return 'missing param \''.$this->arguments[0].'\'';
|
||||||
|
else
|
||||||
|
return 'missing param';
|
||||||
|
}private function WrongParam(){
|
||||||
|
if( count($this->arguments) > 0 )
|
||||||
|
if( count($this->arguments) > 1 )
|
||||||
|
return 'wrong param \''.$this->arguments[0].'\' expected to be of type \''.$this->arguments[1].'\'';
|
||||||
|
else
|
||||||
|
return 'wrong param \''.$this->arguments[0].'\'';
|
||||||
|
else
|
||||||
|
return 'wrong param';
|
||||||
|
}private function ModuleError(){
|
||||||
|
return 'module error';
|
||||||
|
}private function PDOConnection(){
|
||||||
|
return 'database error';
|
||||||
|
}private function WrongPathRepo(){
|
||||||
|
return 'wrong repository\'s path';
|
||||||
|
}private function UnknownRepo(){
|
||||||
|
return 'unknown repository';
|
||||||
|
}private function RepoError(){
|
||||||
|
return 'repository error';
|
||||||
|
}private function UnknownTable(){
|
||||||
|
return 'unknown table';
|
||||||
|
}private function NotAllowedSchema(){
|
||||||
|
return 'schema browsing not allowed';
|
||||||
|
}private function NoMatchFound(){
|
||||||
|
return 'no match found';
|
||||||
|
}private function UnknownTemplate(){
|
||||||
|
return 'unknown template';
|
||||||
|
}private function UnknownAddress(){
|
||||||
|
return 'unknown';
|
||||||
|
}private function UnknownError(){
|
||||||
|
return 'unknown error';
|
||||||
|
}private function AlreadyExists(){
|
||||||
|
return 'item already exists';
|
||||||
|
}private function UnknownDebugError(){
|
||||||
|
return 'unknown debug error';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public function setHttpCode(){
|
||||||
|
http_response_code( $this->error == Err::Success ? 200 : 417 );
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
?>
|
|
@ -0,0 +1,230 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace http\core;
|
||||||
|
|
||||||
|
|
||||||
|
class HttpRequest{
|
||||||
|
|
||||||
|
/* [0] Constants
|
||||||
|
=========================================================*/
|
||||||
|
/* (1) Content-Type */
|
||||||
|
const CT_BINARY = 0; // unknown
|
||||||
|
const CT_TEXT = 1;
|
||||||
|
const CT_JSON = 2;
|
||||||
|
const CT_YAML = 3;
|
||||||
|
const CT_MULTIPART_FORM_DATA = 4;
|
||||||
|
const CT_X_WWW_FORM_URLENCODED = 5;
|
||||||
|
|
||||||
|
|
||||||
|
/* [1] Attributes
|
||||||
|
=========================================================*/
|
||||||
|
private $uri;
|
||||||
|
private $headers;
|
||||||
|
private $method;
|
||||||
|
private $postdata;
|
||||||
|
private $getdata;
|
||||||
|
|
||||||
|
private $type;
|
||||||
|
private $body;
|
||||||
|
|
||||||
|
|
||||||
|
/* [2] Constructs an HTTP Request based on environment
|
||||||
|
*
|
||||||
|
* @return instance<HttpRequest> auto-filled HTTP Request
|
||||||
|
*
|
||||||
|
=========================================================*/
|
||||||
|
public function __construct(){
|
||||||
|
/* [1] Define URI & Status Code & method
|
||||||
|
=========================================================*/
|
||||||
|
$this->uri = $_SERVER['REQUEST_URI'];
|
||||||
|
$this->method = $_SERVER['REQUEST_METHOD'];
|
||||||
|
|
||||||
|
|
||||||
|
/* [2] Define headers
|
||||||
|
=========================================================*/
|
||||||
|
$this->headers = self::getallheaders_adapter();
|
||||||
|
|
||||||
|
|
||||||
|
/* [3] Define default datasets (GET, POST)
|
||||||
|
=========================================================*/
|
||||||
|
$this->getdata = $_GET;
|
||||||
|
$this->postdata = $_POST;
|
||||||
|
|
||||||
|
|
||||||
|
/* [4] Define BODY & its type
|
||||||
|
=========================================================*/
|
||||||
|
/* (1) Default: set plain/text body */
|
||||||
|
$this->body = \file_get_contents('php://input');
|
||||||
|
|
||||||
|
/* (2) Fetch content type */
|
||||||
|
if( isset($this->headers['Content-Type']) )
|
||||||
|
$this->type = self::getContentType($this->headers['Content-Type']);
|
||||||
|
else
|
||||||
|
$this->type = self::getContentType();
|
||||||
|
|
||||||
|
|
||||||
|
/* [5] Parse BODY data -> POST
|
||||||
|
=========================================================*/
|
||||||
|
$this->parseBody();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* GET CONSTANT CT_* FROM `Content-Type` HEADER
|
||||||
|
*
|
||||||
|
* @pContentType<String> `Content-Type` header value
|
||||||
|
*
|
||||||
|
* @return type<int> Constant value
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private static function getContentType($pContentType=null){
|
||||||
|
/* [1] Checks argv
|
||||||
|
=========================================================*/
|
||||||
|
if( is_null($pContentType) )
|
||||||
|
if( isset($_SERVER['CONTENT_TYPE']) )
|
||||||
|
$pContentType = $_SERVER['CONTENT_TYPE'];
|
||||||
|
else
|
||||||
|
$pContentType = 'text/plain';
|
||||||
|
|
||||||
|
|
||||||
|
/* [2] Checks types
|
||||||
|
=========================================================*/
|
||||||
|
/* (1) Form Data Types
|
||||||
|
---------------------------------------------------------*/
|
||||||
|
/* (1) multipart/form-data */
|
||||||
|
if( preg_match('/^multipart\/form\-data; boundary=(.+)$/i', $pContentType) )
|
||||||
|
return self::CT_MULTIPART_FORM_DATA;
|
||||||
|
|
||||||
|
/* (2) application/x-www-form-urlencoded */
|
||||||
|
if( preg_match('/^application\/x\-www\-form\-urlencoded/i', $pContentType) )
|
||||||
|
return self::CT_X_WWW_FORM_URLENCODED;
|
||||||
|
|
||||||
|
|
||||||
|
/* (2) Data types
|
||||||
|
---------------------------------------------------------*/
|
||||||
|
/* (1) Basic JSON content type */
|
||||||
|
if( preg_match('/^application\/json/i', $pContentType) )
|
||||||
|
return self::CT_JSON;
|
||||||
|
|
||||||
|
/* (2) Basic YAML content type */
|
||||||
|
if( preg_match('/^application\/yaml/i', $pContentType) )
|
||||||
|
return self::CT_YAML;
|
||||||
|
|
||||||
|
/* (3) Basic TEXT content type */
|
||||||
|
if( preg_match('/text\/[a-z]+/', $pContentType) )
|
||||||
|
return self::CT_TEXT;
|
||||||
|
|
||||||
|
|
||||||
|
/* (3) Default Type
|
||||||
|
---------------------------------------------------------*/
|
||||||
|
return self::CT_BINARY;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* PARSES BODY DATA
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private function parseBody(){
|
||||||
|
/* [1] If empty body -> do nothing
|
||||||
|
=========================================================*/
|
||||||
|
if( strlen($this->body) === 0 )
|
||||||
|
return true;
|
||||||
|
|
||||||
|
|
||||||
|
/* [2] Management for each ContentType
|
||||||
|
=========================================================*/
|
||||||
|
switch($this->type){
|
||||||
|
|
||||||
|
/* (1) multipart/form-data -> parse for not-POST methods
|
||||||
|
---------------------------------------------------------*/
|
||||||
|
case self::CT_MULTIPART_FORM_DATA:
|
||||||
|
/* (1) Fetch the boundary */
|
||||||
|
if( !preg_match('/boundary=(.+)$/i', $this->headers['Content-Type'], $match) )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
$boundary = $match[1];
|
||||||
|
|
||||||
|
/* (2) Break body into parts */
|
||||||
|
$splitter = "/(?:\n|\r\n|--)*$boundary(?:\n|\r\n|--)?/im";
|
||||||
|
$parts = preg_split($splitter, $this->body);
|
||||||
|
|
||||||
|
/* (3) Process parts */
|
||||||
|
foreach($parts as $part)
|
||||||
|
if( preg_match('/^Content\-Disposition: form\-data; name=\"([^"]+)\"(?:\n|\r\n){2}(.+)$/mi', $part, $match) )
|
||||||
|
$this->postdata[$match[1]] = $match[2];
|
||||||
|
|
||||||
|
/* (4) Erases body */
|
||||||
|
$this->body = '';
|
||||||
|
break;
|
||||||
|
|
||||||
|
|
||||||
|
/* (2) application/x-www-form-urlencoded -> parse for not-POST methods
|
||||||
|
---------------------------------------------------------*/
|
||||||
|
case self::CT_X_WWW_FORM_URLENCODED:
|
||||||
|
/* Auto parse builtin-php function */
|
||||||
|
parse_str($this->body, $this->postdata);
|
||||||
|
|
||||||
|
/* Erases body */
|
||||||
|
$this->body = '';
|
||||||
|
break;
|
||||||
|
|
||||||
|
|
||||||
|
/* (3) application/json -> parse if no error
|
||||||
|
---------------------------------------------------------*/
|
||||||
|
case self::CT_JSON:
|
||||||
|
/* (1) Decode body content */
|
||||||
|
$decoded = json_decode($this->body, true);
|
||||||
|
|
||||||
|
/* (2) If error -> do nothing */
|
||||||
|
if( is_null($decoded) )
|
||||||
|
return;
|
||||||
|
|
||||||
|
/* (3) Parse body into body */
|
||||||
|
$this->body = $decoded;
|
||||||
|
break;
|
||||||
|
|
||||||
|
|
||||||
|
/* (4) application/yaml -> parse if no error
|
||||||
|
---------------------------------------------------------*/
|
||||||
|
case self::CT_YAML:
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public function BODY(){ return $this->body; }
|
||||||
|
public function POST(){ return $this->postdata; }
|
||||||
|
public function GET(){ return $this->getdata; }
|
||||||
|
public function HEADERS(){ return $this->headers; }
|
||||||
|
public function METHOD(){ return $this->method; }
|
||||||
|
public function URI(){ return $this->uri; }
|
||||||
|
|
||||||
|
|
||||||
|
private static function getallheaders_adapter(){
|
||||||
|
/* (1) If exists -> use it
|
||||||
|
---------------------------------------------------------*/
|
||||||
|
if( function_exists('getallheaders') )
|
||||||
|
return getallheaders();
|
||||||
|
|
||||||
|
/* (2) If does not (php-fpm)
|
||||||
|
---------------------------------------------------------*/
|
||||||
|
/* (1) init. variables */
|
||||||
|
$fetched_headers = [];
|
||||||
|
|
||||||
|
/* (2) Get all headers from $_SERVER */
|
||||||
|
foreach($_SERVER as $hname=>$hvalue ){
|
||||||
|
|
||||||
|
// {1} Store only if begins with 'HTTP_' //
|
||||||
|
if( substr($hname,0,5) == 'HTTP_' )
|
||||||
|
$fetched_headers[ str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($hname,5)))))] = $hvalue;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (3) Return created headers */
|
||||||
|
return $fetched_headers;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -239,7 +239,7 @@
|
||||||
/* (2) Replace special characters + replace vars
|
/* (2) Replace special characters + replace vars
|
||||||
---------------------------------------------------------*/
|
---------------------------------------------------------*/
|
||||||
/* (1) Check default URL format */
|
/* (1) Check default URL format */
|
||||||
if( !preg_match('/^(\/[\w\{\}-]*)*\/?$/', $pattern) )
|
if( !preg_match('/^(\/[\w\{\}\.-]*)*\/?$/', $pattern) )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
/* (2) Escape special characters */
|
/* (2) Escape special characters */
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
<?php require_once '../../autoloader.php';
|
<?php
|
||||||
|
|
||||||
echo "home page";
|
echo "home page";
|
Loading…
Reference in New Issue