Rev 995 | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php/*** PHP Version 5** @category PHP* @package jrest* @author aurelien <aurelien@tela-botanica.org>* @copyright 2009 Tela-Botanica* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL* @version $$id$$* @link /doc/jrest/*/class JrestService {protected $config;protected $script_time;protected $max_exec_time;public function JrestService($config) {$this->config = config;$this->script_time = microtime(true);$this->max_exec_time = ini_get('max_execution_time');}public function isAdmin($id) {$admins = $this->config['jrest_admin']['admin'];$admin_tab = explode(',',$admins);if (in_array($id,$admin_tab)) {return true;} else {return false;}}public function controleUtilisateur($id) {if ($_SESSION['user']['name'] == '') {//cas de la session temporaire, on ne fait rien de particulier} else {if (!$this->isAdmin($_SESSION['user']['name']) && $_SESSION['user']['name'] != $id) {// cas d'usurpation d'identitéprint 'Accès interdit';exit();}}}public function logger($index,$chaine) {if(!class_exists('Log')) {include_once('Log.php');Log::getInstance();}Log::setCheminLog($this->config['log']['cheminlog']);Log::setTimeZone($this->config['log']['timezone']);Log::setTailleMax($this->config['log']['taillemax']);Log::ajouterEntree($index,$chaine);}public function verifierOuRelancerExecution() {if((microtime(true) - $this->script_time) > ($this->max_exec_time - 5)*100) {set_time_limit(2);$this->logger('JRestService','Durée du script augmentée :'.microtime(true).' - '.$this->script_time.'.) > ('.$this->max_exec_time.' - 5)*1000000');return true;}return false;}/*** Méthode prenant en paramètre un chemin de fichier squelette et un tableau associatif de données,* en extrait les variables, charge le squelette et retourne le résultat des deux combinés.** @param String $fichier le chemin du fichier du squelette* @param Array $donnees un tableau associatif contenant les variables a injecter dans le squelette.** @return boolean false si le squelette n'existe pas, sinon la chaine résultat.*/public static function traiterSquelettePhp($fichier, Array $donnees = array()) {$sortie = false;if (file_exists($fichier)) {// Extraction des variables du tableau de donnéesextract($donnees);// Démarage de la bufferisation de sortieob_start();// Si les tags courts sont activésif ((bool) @ini_get('short_open_tag') === true) {// Simple inclusion du squeletteinclude $fichier;} else {// Sinon, remplacement des tags courts par la syntaxe classique avec echo$html_et_code_php = self::traiterTagsCourts($fichier);// Pour évaluer du php mélangé dans du html il est nécessaire de fermer la balise php ouverte par eval$html_et_code_php = '?>'.$html_et_code_php;// Interprétation du html et du php dans le bufferecho eval($html_et_code_php);}// Récupèration du contenu du buffer$sortie = ob_get_contents();// Suppression du buffer@ob_end_clean();} else {$msg = "Le fichier du squelette '$fichier' n'existe pas.";trigger_error($msg, E_USER_WARNING);}// Retourne le contenureturn $sortie;}/*** Fonction chargeant le contenu du squelette et remplaçant les tags court php (<?= ...) par un tag long avec echo.** @param String $chemin_squelette le chemin du fichier du squelette** @return string le contenu du fichier du squelette php avec les tags courts remplacés.*/private static function traiterTagsCourts($chemin_squelette) {$contenu = file_get_contents($chemin_squelette);// Remplacement de tags courts par un tag long avec echo$contenu = str_replace('<?=', '<?php echo ', $contenu);// Ajout systématique d'un point virgule avant la fermeture php$contenu = preg_replace("/;*\s*\?>/", "; ?>", $contenu);return $contenu;}}?>