From 71ccd13b67c0bf4d147f0710b6f032c80a683685 Mon Sep 17 00:00:00 2001 From: Cerdic <cedric@yterium.com> Date: Fri, 10 Jun 2011 09:40:40 +0000 Subject: [PATCH] Allegement de la verification de fichier manquant dans un plugin : puisqu'on fait deja un file_exists() quand on a besoin d'inclure un fichier, on en profite pour peupler la globale message_crash_plugins a ce moment, via la fonction include_once_check qu'on utilise dans la compilation des plugins. Plus besoin de parcourir la liste des fichiers a verifier en debut de chaque hit --- ecrire/inc/filtres_ecrire.php | 16 ++++++++-------- ecrire/inc/plugin.php | 5 ++--- ecrire/inc/utils.php | 13 +++++++++++++ ecrire/index.php | 18 ------------------ 4 files changed, 23 insertions(+), 29 deletions(-) diff --git a/ecrire/inc/filtres_ecrire.php b/ecrire/inc/filtres_ecrire.php index af090d4ea8..343ef53d47 100644 --- a/ecrire/inc/filtres_ecrire.php +++ b/ecrire/inc/filtres_ecrire.php @@ -367,17 +367,17 @@ function alertes_auteur($id_auteur) { } if (isset($GLOBALS['meta']['message_crash_plugins']) - AND autoriser('configurer', 'plugins', null, $id_auteur)) { - include_spip('inc/plugin'); - if ($msg = message_crash_plugins()) - $alertes[] = $msg; + AND $GLOBALS['meta']['message_crash_plugins'] + AND autoriser('configurer', 'plugins', null, $id_auteur) + AND is_array($msg = unserialize($GLOBALS['meta']['message_crash_plugins']))) { + $msg = implode(', ',array_map('joli_repertoire',array_keys($msg))); + $alertes[] = _T('plugins_erreur', array('plugins' => $msg)); } - if (isset($GLOBALS['meta']['plugin_erreur_activation']) - AND autoriser('configurer', 'plugins', null, $id_auteur)) { - $alertes[] = $GLOBALS['meta']['plugin_erreur_activation']; - effacer_meta('plugin_erreur_activation'); // pas normal que ce soit ici + AND autoriser('configurer', 'plugins', null, $id_auteur)) { + include_spip('inc/plugin'); + $alertes[] = plugin_donne_erreurs(); } $alertes = pipeline( diff --git a/ecrire/inc/plugin.php b/ecrire/inc/plugin.php index eb8b07cb67..bfa9d3c67d 100644 --- a/ecrire/inc/plugin.php +++ b/ecrire/inc/plugin.php @@ -416,7 +416,7 @@ function plugins_precompile_xxxtions($plugin_valides, $ordre) // pour pouvoir garder le meme niveau d'erreur general $file = trim($file); $_file = $root_dir_type . ".'$plug/$file'"; - $contenu[$charge] .= "if (file_exists(\$f=$_file)){include_once \$f;}\n"; + $contenu[$charge] .= "include_once_check($_file);\n"; $liste_fichier_verif["$root_dir_type:$plug/$file"]=1; } } @@ -523,8 +523,7 @@ function pipeline_precompile($verifs){ $file = str_replace("''.","",$file); $file = str_replace(constant($dir), '', $file); } - $s_inc .= 'if (file_exists($f=' - . $file . ')){include_once($f);}'."\n"; + $s_inc .= "include_once_check($file);\n"; } } if (strlen($s_inc)) diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php index d3715ca2a3..3c76656d73 100644 --- a/ecrire/inc/utils.php +++ b/ecrire/inc/utils.php @@ -67,6 +67,19 @@ function charger_fonction($nom, $dossier='exec', $continue=false) { exit; } +/** + * Inclusion unique avec verification d'existence du fichier + log en crash sinon + * @param string $file + * @return bool + */ +function include_once_check($file){ + if (file_exists($file)) {include_once $file;return true;} + $crash = (isset($GLOBALS['message_crash_plugins'])?unserialize($GLOBALS['message_crash_plugins']):''); + $crash = ($crash?$crash:array()); + $crash[$file] = true; + ecrire_meta('message_crash_plugins',serialize($crash)); + return false; +} // // la fonction cherchant un fichier PHP dans le SPIP_PATH diff --git a/ecrire/index.php b/ecrire/index.php index 96802b0dcc..d92d28caa3 100644 --- a/ecrire/index.php +++ b/ecrire/index.php @@ -113,24 +113,6 @@ elseif (!preg_match(',^[a-z4_][0-9a-z_-]*$,i', $exec)) { set_request('exec', $exec); } -// Verification des plugins -// (ne pas interrompre une restauration ou un upgrade) -elseif ($exec!='upgrade' -AND !$var_auth -AND !_DIR_RESTREINT -AND autoriser('configurer') -AND lire_fichier(_CACHE_PLUGINS_VERIF,$l) -AND $l = @unserialize($l)) { - foreach ($l as $fichier) { - if (!@is_readable($fichier)) { - spip_log("Verification plugin: echec sur $fichier !"); - include_spip('inc/plugin'); - verifie_include_plugins(); - break; // sortir de la boucle, on a fait un verif - } - } -} - // compatibilite ascendante $GLOBALS['spip_display'] = isset($GLOBALS['visiteur_session']['prefs']['display']) ? $GLOBALS['visiteur_session']['prefs']['display'] -- GitLab