<?php function autoriser_php( $texte) {

// Dossier où sont stockés les scripts //(à partir du fichier spip.php et non à partir du répertoire squelettes) $dossier_inclus = './my_script_php/';

// Les fichiers inclus autorises sont : // *.php, *.php3, *.php4 , *.php5, *.phtml, *.htm, *.html, *.inc $fichiers_autorises="(php|php3|php4|php5|phtml|htm|html|inc)";

// Recherche des fichiers inclus autorisés dans le dossier de stockage $dir=opendir("$dossier_inclus");
while ($fichier=readdir ($dir))
{
if(( preg_match( $fichiers_autorises, $fichier)))
{
$scripts_autorises[]= $fichier;
}
}
closedir
($dir);
// Expression régulière de recherche de #INCLURE(script.php?var1=XXX&var2=YYY) avec une URL. $chaine_url = "((&nbsp;\?(\w)+=(.)+){1}(&amp;(\w)+=(.)+)*)*"; $chaine_recherche = "/#INCLURE( *)\(( *)([^\)]*\.".$fichiers_autorises.$chaine_url.")( *)\)/i";
while( preg_match( $chaine_recherche, $texte, $resultats)) {
$autorise = false;
reset
( $scripts_autorises);
$nom_length = strlen($resultats[3]); // SPIP nous a introduit un caractère blanc '&nbsp;' avant le point d'interrogation '?' pour la version française. $pos_question = strpos($resultats[3],'&nbsp;?'); // Si la chaine recherchée n'existe pas on souhaite prendre la longueur max. // dans le cas où il n'y a pas d'URL. if ($pos_question === false)
{ $pos_question = $nom_length; $nom_url = ""; } else { // le chiffre 7 correspond à la longueur de '&nbsp;?'. On récupère l'URL après le ?. $nom_url = substr($resultats[3],$pos_question+7,$nom_length); //SPIP convertit le caractère '&' en '&amp;' on refeait l'opération inverse ! $nom_url = str_replace ("&amp;","&",$nom_url); }; $nom_script = substr($resultats[3],0,$pos_question); // Verifie le droit d'inclure ce fichier script ! while( $script = each( $scripts_autorises)) {
if( strcasecmp( $script[value], $nom_script) == 0) $autorise = true;
}
if( $autorise == true) {
// Verifie que le fichier existe $f=$dossier_inclus . $nom_script;
if( file_exists ($f)) {
// Vide le buffer de sortie $affichage_php = ''; // On créée les variables on on les initialise grâce à l'URL. parse_str($nom_url); // Et lance le fichier inclu !!! ob_start();
include ($f);
} else {
$affichage_php = "<b>#INCLURE: Le fichier de script $f n'existe pas !</b>";
}
} else {
$affichage_php = "<b>#INCLURE: Script NON autoris&eacute; !</b>";
}
// Attention, n'effectue qu'un seul remplacement à la fois ! $affichage_php = ob_get_contents();
ob_end_clean
();
$texte = preg_replace( $chaine_recherche, $affichage_php, $texte, 1);
}
return( $texte);
}
?>