none global $SI_css_names; $SI_css_names[] = page2interne($feuille); } // Ajoute la feuille de style de base ajouter_feuille_css("AgroSIXPack.css"); // Termine l'exécution du programme en affichant un message d'erreur function erreur($str) { // string -> none die(bold('*** Erreur : ') . $str); } // Retourne la valeur du tableau $tab à l'indice $i function globarref(&$tab, $i) { return empty($tab[$i])?'':$tab[$i]; } // Retourne la valeur du tableau $_GET à l'indice $i function GETref($nom) { // string -> string return globarref($_GET, $nom); } function GETcheckbox($nom) { // string -> string return (GETref($nom)?true:false); } // Retourne une chaîne de caractères représentant un lien vers une URL externe. // $url doit commencer par le protocole (ex: http://, https:// ...) function lien_externe($str, $url) { // string string -> string return baliser($str, 'a', "href='$url'"); } // Retourne une chaine de caratères représentant un lien verse une page interne au site. function lien_interne($str, $page) { // string string -> string return baliser($str, 'a', 'href=\''.url_interne($page).'\''); } // Transforme un nom de fichier en nom local au package courant. function page2interne($page) { // string global $SI_package; if(strpos($page, '/') === 0) return '.'.$page; // url interne relative au répertoire de base else if(strpos($page, '://') !== false) return $page; // url externe else return $SI_package.'/'.$page; // url interne, peut commencer par "../" } // Retourne une chaine de caractères contenant un lien vers la page function url_interne($page) { // string -> string local_php_file($page); // checks that .php file exists in current directory, but don't use the resulting filename return 'AgroSIXPack.php?SI_fichier='.page2interne($page); } // Redirige vers la page désignée // Attention : aucun affichage ne doit être fait avant, pas même d'espace avant ou après le code PHP ! function redirection($page) { // string -> none header("Location: ".url_interne($page)); } // Checks whether $f is a file inside the current directory // And returns a correct filename function local_php_file($f) { // $fichier = './' . $f . '.php'; // './' to avoid hack with '~' and '/' $fichier = './' . $f; // './' to avoid hack with '~' and '/' if(!is_file($fichier)) { erreur('Fichier "'.$fichier.'" introuvable'); } else if(strstr($fichier, '..')) { // avoid hacks! No parent directory erreur('Nom de fichier invalide : '.$f); } return $fichier; } function get_package_name($f) { $pos = strrpos($f, '/'); $pkg = substr($f, 0, $pos); $filename = substr($f, $pos+1, strlen($f)-$pos); return array($pkg, $filename); } function set_current_package($package) { global $SI_package, $SI_base_dir; $SI_package = $package; chdir($SI_base_dir.'/'.$SI_package); } /* Programme principal */ // Inclusion du fichier étudiant $fichier_seul = GETref('SI_fichier'); if(!$fichier_seul) { // si aucun fichier spécifier, renvoyer vers la page d'accueil $fichier_seul = "./php_list.php"; } //$fichier = local_php_file($fichier_seul); // file must be local local_php_file($fichier_seul); // check that file is local // Récupérer le nom de package et le nom de fichier list($SI_package, $SI_filename) = get_package_name($fichier_seul); //printline("pakg = $SI_package filename=$SI_filename"); //printline(getcwd()); // Se placer dans le répertoire correspondant au package set_current_package($SI_package); //printline(getcwd()); // Le titre à afficher dans l'onglet du navigateur (+ titre navigateur) // Peut être redéfini dans le fichier étudiant $SI_titre_page = $fichier_seul; // TODO: remove all unnecessary variables before calling user code! // Inclure les définitions du fichier étudiant require($SI_filename); $SI_validation = GETref('SI_id_form'); if(!function_exists('main')) { erreur('La fonction "main" n\'est pas définie !'); } // some solutions to include in the global scope: // http://php.net/manual/fr/function.include.php // Entête XHTML, encodage ANSI ?> "; ?>
\n"); ?>