Pat a écrit :
Bon, j'ai mis la main à/dans la pâte. J'ai trouvé le bug.
Il y a un *conflit de noms de variable* ($f !) entre :
utils.php : function charger_fonction(), ligne 41
include_once $inc;
if (function_exists($f)) return $f;
if (function_exists($g)) return $g;
et :
public/parametrer.php : ligne 24
if ($f = find_in_path('mes_fonctions.php')
OR $f = find_in_path('mes_fonctions.php3')) {
global $dossier_squelettes;
include ($f);
}
Voici des variables à renommer de toute urgence.
Avec une fonction comme suit, tout rentre dans l'ordre lorsque include_spip('public/parametrer') (ou similaire) est appellé :
function charger_fonction($nom, $dossier='exec', $continue=false) {
if (substr($dossier,-1) != '/') $dossier .= '/';
if (function_exists($f_ = str_replace('/','_',$dossier) . $nom))
return $f_;
if (function_exists($g_ = $f_ . '_dist'))
return $g_;
// Sinon charger le fichier de declaration si plausible
if (!preg_match(',^\w+$,', $f_))
die(htmlspecialchars($nom)." pas autorise");
// passer en minuscules (cf les balises de formulaires)
$inc = find_in_path(($d_ = strtolower($nom) . '.php'), $dossier);
if ($inc) {
include_once $inc;
if (function_exists($f_)) return $f_;
if (function_exists($g_)) return $g_;
}
if ($continue) return false;
// Echec : message d'erreur
spip_log("fonction $nom ($f_ ou $g_) indisponible" .
($inc ? "" : " (fichier $d_ absent de $dossier)"));
include_spip('inc/minipres');
echo minipres(_T('forum_titre_erreur'),
_T('fichier_introuvable', array('fichier'=> '<b>'.htmlentities($d_).'</b>')));
exit;
}