* @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ées extract($donnees); // Démarage de la bufferisation de sortie ob_start(); // Si les tags courts sont activés if ((bool) @ini_get('short_open_tag') === true) { // Simple inclusion du squelette include $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 buffer echo 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 contenu return $sortie; } /** * Fonction chargeant le contenu du squelette et remplaçant les tags court php (/", "; ?>", $contenu); return $contenu; } } ?>