<?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 = "(( \?(\w)+=(.)+){1}(&(\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 ' ' avant le point d'interrogation '?' pour la version française.
$pos_question = strpos($resultats[3],' ?');
// 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 ' ?'. 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 '&' on refeait l'opération inverse !
$nom_url = str_replace ("&","&",$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é !</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);
}
?>