L'url courante * * @GET Arguments indirects (variable $_GET) * * @return status Retourne si oui ou non tout s'est bien passe * */ public function __construct($url){ /* [0] On met a jour la configuration =====================================================*/ // Extensions supportees $extensions_conf = json_decode( file_get_contents('http://'.$_SERVER['HTTP_HOST'].self::$extension_config_path), true )['extensions']; self::$supported_extensions = $extensions_conf; // Dossiers supportes $parents_conf = json_decode( file_get_contents('http://'.$_SERVER['HTTP_HOST'].self::$parents_config_path), true )['parents']; self::$supported_parents = $parents_conf; /* [1] On recupere les donnees de l'URL ==================================================*/ $serialFlags = array_slice( explode('/',$url), 1 ); /* [2] On check/cree les drapeaux avec ces donnees ==================================================*/ if( !$this->createFlags($serialFlags) ) // Creation des drapeaux return false; // On retourne FALSE, si erreur /* [3] On construit le chemin a partir des tags ==================================================*/ if( !$this->buildPath() ) // Construction du chemin return false; // On retourne FALSE, si erreur /* [4] On gere l'affichage pour l'appel externe ==================================================*/ $this->view(); return true; } /* FONCTION QUI VERIFIE LES DRAPEAUX * * @serialFlags Tableau a indice numerique * * @return correct Retourne si oui ou non les drapeaux sont corrects * */ private function createFlags($serialFlags){ /* [1] Verification des flags (version serialisee) ======================================================*/ $correct = true; // Verification du nombre de drapeaux () au moins 3 $correct = $correct && count($serialFlags) >= 3; // Verification que l'extension est correcte $correct = $correct && array_key_exists($serialFlags[0], self::$supported_extensions); // Verification du filename $correct = $correct && preg_match('#^[\w_-]+$#i', $serialFlags[1]); // Verification du parent $correct = $correct && array_key_exists($serialFlags[2], self::$supported_parents); // Verification du sous-parent (optionnel) $opt_subParent = count($serialFlags) >= 4; if( $opt_subParent ) $correct = $correct && preg_match('#^[\w_-]+$#i', $serialFlags[3]); if( !$correct ) return false; /* [2] Creation (non serialisee) des flags ======================================================*/ // Si tout se deroule bien, on cree les flags $this->flags = array( 'extension' => $serialFlags[0], 'filename' => $serialFlags[1], 'parent' => $serialFlags[2] ); // Ajout du sous-parent optionnel if( $opt_subParent ) $this->flags['subparent'] = $serialFlags[3]; return true; } /* FONCTION QUI CONSTRUIT LE CHEMIN A PARTIR DU PATH * * @return fileExists Retourne si oui ou non le fichier cible existe * * @format * * f/extension/filename/parent/:subparent:/ (:OPT:) * */ private function buildPath(){ /* [1] On recupere le HEADER associe a l'extension ==========================================================*/ // Si aucun header pour cet cle, on retourne une erreur if( !isset(self::$supported_extensions[$this->flags['extension']]) ) return false; // On recupere le header associe $header = self::$supported_extensions[$this->flags['extension']]; /* [2] On recupere le chemin associe au parent ==========================================================*/ // Si aucun dossier pour cet indice, on retourne une erreur if( !isset(self::$supported_parents[$this->flags['parent']]) ) return false; // On recupere le dossier associe $parent = self::$supported_parents[$this->flags['parent']]; /* [3] Gestion du sous-parent optionnel ==========================================================*/ $opt_subParent = (isset($this->flags['subparent'])) ? $this->flags['subparent'].'/' : ''; /* [4] On definit le header ==========================================================*/ $this->header = $header; /* [5] On construit le chemin ==========================================================*/ $this->path = __ROOT__.$parent.'/'.$opt_subParent.$this->flags['filename'].'.'.$this->flags['extension']; /* [6] On retourne si le fichier existe ou non ==========================================================*/ return file_exists( $this->path ); } /* FUNCTION QUI AFFICHE LA RESSOURCE EN QUESTION * */ public function view(){ // On definit le header header('Content-Type: '.$this->header); // On inclut le contenu include $this->path; } } ?>