Esempio n. 1
0
File: plugin.php Progetto: spip/SPIP
function pipeline_precompile($prepend_code = array())
{
    $content = "";
    foreach ($GLOBALS['spip_pipeline'] as $action => $pipeline) {
        $s_inc = "";
        $s_call = "";
        $pipe = array_filter(explode('|', $pipeline));
        // Eclater le pipeline en filtres et appliquer chaque filtre
        foreach ($pipe as $fonc) {
            $fonc = trim($fonc);
            $s_call .= '$val = minipipe(\'' . $fonc . '\', $val);' . "\n";
            if (isset($GLOBALS['spip_matrice'][$fonc])) {
                $file = $GLOBALS['spip_matrice'][$fonc];
                $file = "'{$file}'";
                // si un _DIR_XXX: est dans la chaine, on extrait la constante
                if (preg_match(",(_(DIR|ROOT)_[A-Z_]+):,Ums", $file, $regs)) {
                    $dir = $regs[1];
                    $root_dir = str_replace('_DIR_', '_ROOT_', $dir);
                    if (defined($root_dir)) {
                        $dir = $root_dir;
                    }
                    $file = str_replace($regs[0], "'." . $dir . ".'", $file);
                    $file = str_replace("''.", "", $file);
                    $file = str_replace(constant($dir), '', $file);
                }
                $s_inc .= "include_once_check({$file});\n";
            }
        }
        if (strlen($s_inc)) {
            $s_inc = "static \$inc=null;\nif (!\$inc){\n{$s_inc}\$inc=true;\n}\n";
        }
        $content .= "// Pipeline {$action} \n" . "function execute_pipeline_{$action}(&\$val){\n" . $s_inc . ((isset($prepend_code[$action]) and strlen($prepend_code[$action])) ? trim($prepend_code[$action]) . "\n" : '') . $s_call . "return \$val;\n}\n";
    }
    ecrire_fichier_php(_CACHE_PIPELINES, $content);
    clear_path_cache();
}
Esempio n. 2
0
/**
 * Fonction d'initialisation, appellée dans inc_version ou mes_options
 *
 * Elle définit les répertoires et fichiers non partageables
 * et indique dans $test_dirs ceux devant être accessibles en écriture
 * mais ne touche pas à cette variable si elle est déjà définie
 * afin que mes_options.php puisse en spécifier d'autres.
 *
 * Elle définit ensuite les noms des fichiers et les droits.
 * Puis simule un register_global=on sécurisé.
 *
 * @param string $pi Répertoire permanent inaccessible
 * @param string $pa Répertoire permanent accessible
 * @param string $ti Répertoire temporaire inaccessible
 * @param string $ta Répertoire temporaire accessible
 */
function spip_initialisation_core($pi = NULL, $pa = NULL, $ti = NULL, $ta = NULL)
{
    static $too_late = 0;
    if ($too_late++) {
        return;
    }
    // Declaration des repertoires
    // le nom du repertoire plugins/ activables/desactivables
    if (!defined('_DIR_PLUGINS')) {
        define('_DIR_PLUGINS', _DIR_RACINE . "plugins/");
    }
    // le nom du repertoire des extensions/ permanentes du core, toujours actives
    if (!defined('_DIR_PLUGINS_DIST')) {
        define('_DIR_PLUGINS_DIST', _DIR_RACINE . "plugins-dist/");
    }
    // le nom du repertoire des librairies
    if (!defined('_DIR_LIB')) {
        define('_DIR_LIB', _DIR_RACINE . "lib/");
    }
    if (!defined('_DIR_IMG')) {
        define('_DIR_IMG', $pa);
    }
    if (!defined('_DIR_LOGOS')) {
        define('_DIR_LOGOS', $pa);
    }
    if (!defined('_DIR_IMG_ICONES')) {
        define('_DIR_IMG_ICONES', _DIR_LOGOS . "icones/");
    }
    if (!defined('_DIR_DUMP')) {
        define('_DIR_DUMP', $ti . "dump/");
    }
    if (!defined('_DIR_SESSIONS')) {
        define('_DIR_SESSIONS', $ti . "sessions/");
    }
    if (!defined('_DIR_TRANSFERT')) {
        define('_DIR_TRANSFERT', $ti . "upload/");
    }
    if (!defined('_DIR_CACHE')) {
        define('_DIR_CACHE', $ti . "cache/");
    }
    if (!defined('_DIR_CACHE_XML')) {
        define('_DIR_CACHE_XML', _DIR_CACHE . "xml/");
    }
    if (!defined('_DIR_SKELS')) {
        define('_DIR_SKELS', _DIR_CACHE . "skel/");
    }
    if (!defined('_DIR_AIDE')) {
        define('_DIR_AIDE', _DIR_CACHE . "aide/");
    }
    if (!defined('_DIR_TMP')) {
        define('_DIR_TMP', $ti);
    }
    if (!defined('_DIR_VAR')) {
        define('_DIR_VAR', $ta);
    }
    if (!defined('_DIR_ETC')) {
        define('_DIR_ETC', $pi);
    }
    if (!defined('_DIR_CONNECT')) {
        define('_DIR_CONNECT', $pi);
    }
    if (!defined('_DIR_CHMOD')) {
        define('_DIR_CHMOD', $pi);
    }
    if (!isset($GLOBALS['test_dirs'])) {
        // Pas $pi car il est bon de le mettre hors ecriture apres intstall
        // il sera rajoute automatiquement si besoin a l'etape 2 de l'install
        $GLOBALS['test_dirs'] = array($pa, $ti, $ta);
    }
    // Declaration des fichiers
    if (!defined('_CACHE_PLUGINS_PATH')) {
        define('_CACHE_PLUGINS_PATH', _DIR_CACHE . "charger_plugins_chemins.php");
    }
    if (!defined('_CACHE_PLUGINS_OPT')) {
        define('_CACHE_PLUGINS_OPT', _DIR_CACHE . "charger_plugins_options.php");
    }
    if (!defined('_CACHE_PLUGINS_FCT')) {
        define('_CACHE_PLUGINS_FCT', _DIR_CACHE . "charger_plugins_fonctions.php");
    }
    if (!defined('_CACHE_PIPELINES')) {
        define('_CACHE_PIPELINES', _DIR_CACHE . "charger_pipelines.php");
    }
    if (!defined('_CACHE_CHEMIN')) {
        define('_CACHE_CHEMIN', _DIR_CACHE . "chemin.txt");
    }
    # attention .php obligatoire pour ecrire_fichier_securise
    if (!defined('_FILE_META')) {
        define('_FILE_META', $ti . 'meta_cache.php');
    }
    if (!defined('_DIR_LOG')) {
        define('_DIR_LOG', _DIR_TMP . 'log/');
    }
    if (!defined('_FILE_LOG')) {
        define('_FILE_LOG', 'spip');
    }
    if (!defined('_FILE_LOG_SUFFIX')) {
        define('_FILE_LOG_SUFFIX', '.log');
    }
    // Le fichier de connexion a la base de donnees
    // tient compte des anciennes versions (inc_connect...)
    if (!defined('_FILE_CONNECT_INS')) {
        define('_FILE_CONNECT_INS', 'connect');
    }
    if (!defined('_FILE_CONNECT')) {
        define('_FILE_CONNECT', @is_readable($f = _DIR_CONNECT . _FILE_CONNECT_INS . '.php') ? $f : (@is_readable($f = _DIR_RESTREINT . 'inc_connect.php') ? $f : false));
    }
    // Le fichier de reglages des droits
    if (!defined('_FILE_CHMOD_INS')) {
        define('_FILE_CHMOD_INS', 'chmod');
    }
    if (!defined('_FILE_CHMOD')) {
        define('_FILE_CHMOD', @is_readable($f = _DIR_CHMOD . _FILE_CHMOD_INS . '.php') ? $f : false);
    }
    if (!defined('_FILE_LDAP')) {
        define('_FILE_LDAP', 'ldap.php');
    }
    if (!defined('_FILE_TMP_SUFFIX')) {
        define('_FILE_TMP_SUFFIX', '.tmp.php');
    }
    if (!defined('_FILE_CONNECT_TMP')) {
        define('_FILE_CONNECT_TMP', _DIR_CONNECT . _FILE_CONNECT_INS . _FILE_TMP_SUFFIX);
    }
    if (!defined('_FILE_CHMOD_TMP')) {
        define('_FILE_CHMOD_TMP', _DIR_CHMOD . _FILE_CHMOD_INS . _FILE_TMP_SUFFIX);
    }
    // Definition des droits d'acces en ecriture
    if (!defined('_SPIP_CHMOD') and _FILE_CHMOD) {
        include_once _FILE_CHMOD;
    }
    // Se mefier des fichiers mal remplis!
    if (!defined('_SPIP_CHMOD')) {
        define('_SPIP_CHMOD', 0777);
    }
    if (!defined('_DEFAULT_CHARSET')) {
        /** Le charset par défaut lors de l'installation */
        define('_DEFAULT_CHARSET', 'utf-8');
    }
    if (!defined('_ROOT_PLUGINS')) {
        define('_ROOT_PLUGINS', _ROOT_RACINE . "plugins/");
    }
    if (!defined('_ROOT_PLUGINS_DIST')) {
        define('_ROOT_PLUGINS_DIST', _ROOT_RACINE . "plugins-dist/");
    }
    if (!defined('_ROOT_PLUGINS_SUPPL') && defined('_DIR_PLUGINS_SUPPL') && _DIR_PLUGINS_SUPPL) {
        define('_ROOT_PLUGINS_SUPPL', _ROOT_RACINE . str_replace(_DIR_RACINE, '', _DIR_PLUGINS_SUPPL));
    }
    // La taille des Log
    if (!defined('_MAX_LOG')) {
        define('_MAX_LOG', 100);
    }
    // Sommes-nous dans l'empire du Mal ?
    // (ou sous le signe du Pingouin, ascendant GNU ?)
    if (isset($_SERVER['SERVER_SOFTWARE']) and strpos($_SERVER['SERVER_SOFTWARE'], '(Win') !== false) {
        if (!defined('_OS_SERVEUR')) {
            define('_OS_SERVEUR', 'windows');
        }
        if (!defined('_SPIP_LOCK_MODE')) {
            define('_SPIP_LOCK_MODE', 1);
        }
        // utiliser le flock php
    } else {
        if (!defined('_OS_SERVEUR')) {
            define('_OS_SERVEUR', '');
        }
        if (!defined('_SPIP_LOCK_MODE')) {
            define('_SPIP_LOCK_MODE', 1);
        }
        // utiliser le flock php
        #if (!defined('_SPIP_LOCK_MODE')) define('_SPIP_LOCK_MODE',2); // utiliser le nfslock de spip mais link() est tres souvent interdite
    }
    // Langue par defaut
    if (!defined('_LANGUE_PAR_DEFAUT')) {
        define('_LANGUE_PAR_DEFAUT', 'fr');
    }
    //
    // Module de lecture/ecriture/suppression de fichiers utilisant flock()
    // (non surchargeable en l'etat ; attention si on utilise include_spip()
    // pour le rendre surchargeable, on va provoquer un reecriture
    // systematique du noyau ou une baisse de perfs => a etudier)
    include_once _ROOT_RESTREINT . 'inc/flock.php';
    // charger tout de suite le path et son cache
    load_path_cache();
    // *********** traiter les variables ************
    //
    // Securite
    //
    // Ne pas se faire manger par un bug php qui accepte ?GLOBALS[truc]=toto
    if (isset($_REQUEST['GLOBALS'])) {
        die;
    }
    // nettoyer les magic quotes \' et les caracteres nuls %00
    spip_desinfecte($_GET);
    spip_desinfecte($_POST);
    spip_desinfecte($_COOKIE);
    spip_desinfecte($_REQUEST);
    // Par ailleurs on ne veut pas de magic_quotes au cours de l'execution
    @set_magic_quotes_runtime(0);
    // Si les variables sont passees en global par le serveur,
    // il faut faire quelques verifications de base
    $avertir_register_globals = false;
    if (test_valeur_serveur(@ini_get('register_globals'))) {
        // ne pas desinfecter les globales en profondeur car elle contient aussi les
        // precedentes, qui seraient desinfectees 2 fois.
        spip_desinfecte($GLOBALS, false);
        if (include_spip('inc/php3')) {
            spip_register_globals(true);
        }
        $avertir_register_globals = true;
    }
    // appliquer le cookie_prefix
    if ($GLOBALS['cookie_prefix'] != 'spip') {
        include_spip('inc/cookie');
        recuperer_cookies_spip($GLOBALS['cookie_prefix']);
    }
    //
    // Capacites php (en fonction de la version)
    //
    $GLOBALS['flag_ob'] = function_exists("ob_start") && function_exists("ini_get") && !strstr(@ini_get('disable_functions'), 'ob_');
    $GLOBALS['flag_sapi_name'] = function_exists("php_sapi_name");
    $GLOBALS['flag_get_cfg_var'] = @get_cfg_var('error_reporting') != "";
    $GLOBALS['flag_upload'] = !$GLOBALS['flag_get_cfg_var'] || get_cfg_var('upload_max_filesize') > 0;
    // Compatibilite avec serveurs ne fournissant pas $REQUEST_URI
    if (isset($_SERVER['REQUEST_URI'])) {
        $GLOBALS['REQUEST_URI'] = $_SERVER['REQUEST_URI'];
    } else {
        $GLOBALS['REQUEST_URI'] = $_SERVER['PHP_SELF'];
        if (!empty($_SERVER['QUERY_STRING']) and !strpos($_SERVER['REQUEST_URI'], '?')) {
            $GLOBALS['REQUEST_URI'] .= '?' . $_SERVER['QUERY_STRING'];
        }
    }
    // Duree de validite de l'alea pour les cookies et ce qui s'ensuit.
    if (!defined('_RENOUVELLE_ALEA')) {
        define('_RENOUVELLE_ALEA', 12 * 3600);
    }
    // charger les meta si possible et renouveller l'alea au besoin
    // charge aussi effacer_meta et ecrire_meta
    $inc_meta = charger_fonction('meta', 'inc');
    $inc_meta();
    // on a pas pu le faire plus tot
    if ($avertir_register_globals) {
        avertir_auteurs("register_globals", _L("Problème de sécurité : register_globals=on; dans php.ini à corriger."));
    }
    // nombre de repertoires depuis la racine
    // on compare a l'adresse de spip.php : $_SERVER["SCRIPT_NAME"]
    // ou a defaut celle donnee en meta ; (mais si celle-ci est fausse
    // le calcul est faux)
    if (!_DIR_RESTREINT) {
        $GLOBALS['profondeur_url'] = 1;
    } else {
        $uri = isset($_SERVER['REQUEST_URI']) ? explode('?', $_SERVER['REQUEST_URI']) : '';
        $uri_ref = $_SERVER["SCRIPT_NAME"];
        if (!$uri_ref or $ti !== _NOM_TEMPORAIRES_INACCESSIBLES) {
            if (isset($GLOBALS['meta']['adresse_site'])) {
                $uri_ref = parse_url($GLOBALS['meta']['adresse_site']);
                $uri_ref = $uri_ref['path'] . '/';
            } else {
                $uri_ref = "";
            }
        }
        if (!$uri or !$uri_ref) {
            $GLOBALS['profondeur_url'] = 0;
        } else {
            $GLOBALS['profondeur_url'] = max(0, substr_count($uri[0], '/') - substr_count($uri_ref, '/'));
        }
    }
    // s'il y a un cookie ou PHP_AUTH, initialiser visiteur_session
    if (_FILE_CONNECT) {
        if (verifier_visiteur() == '0minirezo' and !isset($_COOKIE['spip_admin'])) {
            clear_path_cache();
        }
    }
}
Esempio n. 3
0
function ecrire_plugin_actifs($plugin,$pipe_recherche=false,$operation='raz') {
	static $liste_pipe_manquants=array();

	// creer le repertoire cache/ si necessaire ! (installation notamment)
	sous_repertoire(_DIR_CACHE, '', false,true);

	$liste_fichier_verif = array();
	if (($pipe_recherche)&&(!in_array($pipe_recherche,$liste_pipe_manquants)))
		$liste_pipe_manquants[]=$pipe_recherche;

	if ($operation!='raz'){
		$plugin_actifs = liste_chemin_plugin_actifs();
		$plugin_liste = liste_plugin_files();
		$plugin_valides = array_intersect($plugin_actifs,$plugin_liste);
		if ($operation=='ajoute')
			$plugin = array_merge($plugin_valides,$plugin);
		if ($operation=='enleve')
			$plugin = array_diff($plugin_valides,$plugin);
	}

	// recharger le xml des plugins a activer
	list($plugin_valides,$ordre,$infos) = liste_plugin_valides($plugin,true);

	ecrire_meta('plugin',serialize($plugin_valides));
	effacer_meta('message_crash_plugins'); // baisser ce flag !
	$plugin_header_info = array();
	foreach($plugin_valides as $p=>$resume){
		$plugin_header_info[]= $p.($resume['version']?"(".$resume['version'].")":"");
	}
	ecrire_meta('plugin_header',substr(strtolower(implode(",",$plugin_header_info)),0,900));

	$start_file = "<"."?php\nif (defined('_ECRIRE_INC_VERSION')) {\n";
	$end_file = "}\n?".">";

	if (is_array($infos)){
		// construire tableaux de boutons et onglets
		$liste_boutons = array();
		$liste_onglets = array();
		foreach($ordre as $p){
			$dir_type = $plugin_valides[$p]['dir_type'];
			$plug = $plugin_valides[$p]['dir'];
			$info = $infos[$dir_type][$plug];
			if (isset($info['bouton'])){
				$liste_boutons = array_merge($liste_boutons,$info['bouton']);
			}
			if (isset($info['onglet'])){
				$liste_onglets = array_merge($liste_onglets,$info['onglet']);
			}
		}
	}

	// generer les fichier
	// charger_plugins_options.php
	// charger_plugins_fonctions.php
	if (defined('_DIR_PLUGINS_SUPPL'))
		$dir_plugins_suppl = implode(array_filter(explode(':',_DIR_PLUGINS_SUPPL)),'|');

	foreach(array('chemins'=>_CACHE_PLUGINS_PATH,'options'=>_CACHE_PLUGINS_OPT,'fonctions'=>_CACHE_PLUGINS_FCT) as $charge=>$fileconf){
		$s = "";
		$splugs = "";
		$chemins = array();
		if (is_array($infos)){
			foreach($ordre as $p){
				$dir_type = $plugin_valides[$p]['dir_type'];
				$plug = $plugin_valides[$p]['dir'];
				$info = $infos[$dir_type][$plug];
				if($dir_plugins_suppl && preg_match(',('.$dir_plugins_suppl.'),',$plugin_valides[$p]['dir'])){
					//$plugin_valides[$p]['dir_type'] = '_DIR_RACINE';
					$dir_type = '_DIR_RACINE';
					//if(!test_espace_prive())
						$plug = str_replace('../','',$plug);
				}
				$root_dir_type = str_replace('_DIR_','_ROOT_',$dir_type);
				$dir = $dir_type.".'" . $plug ."/'";
				// definir le plugin, donc le path avant l'include du fichier options
				// permet de faire des include_spip pour attraper un inc_ du plugin
				if ($charge=='chemins'){
					$prefix = strtoupper(preg_replace(',\W,','_',$info['prefix']));
					$splugs .= "define('_DIR_PLUGIN_$prefix',$dir);\n";
					foreach($info['path'] as $chemin){
						if (!isset($chemin['version']) OR plugin_version_compatible($chemin['version'],$GLOBALS['spip_version_branche'])){
							$dir = $chemin['dir'];
							if (strlen($dir) AND $dir{0}=="/") $dir = substr($dir,1);
							if (!isset($chemin['type']) OR $chemin['type']=='public')
								$chemins['public'][]="_DIR_PLUGIN_$prefix".(strlen($dir)?".'$dir'":"");
							if (!isset($chemin['type']) OR $chemin['type']=='prive')
								$chemins['prive'][]="_DIR_PLUGIN_$prefix".(strlen($dir)?".'$dir'":"");
							#$splugs .= "if (".(($chemin['type']=='public')?"":"!")."_DIR_RESTREINT) ";
							#$splugs .= "_chemin(_DIR_PLUGIN_$prefix".(strlen($dir)?".'$dir'":"").");\n";
						}
					}
				}
				// concerne uniquement options et fonctions
				if (isset($info[$charge])){
					foreach($info[$charge] as $file){
						// on genere un if file_exists devant chaque include pour pouvoir garder le meme niveau d'erreur general
						$file = trim($file);

						if (strlen(constant($dir_type)) && (strpos($plug, constant($dir_type)) === 0)) {
							$dir = str_replace("'".constant($dir_type), $root_dir_type.".'", "'$plug/'");
						}
						if($root_dir_type == '_ROOT_RACINE'){
							$plug = str_replace('../','',$plug);
						}
						else
							$dir = $root_dir_type.".'$plug/'";
						$s .= "if (file_exists(\$f=$dir.'".trim($file)."')){ include_once \$f;}\n";
						$liste_fichier_verif[] = "$root_dir_type:$plug/".trim($file);
					}
				}
			}
		}
		if ($charge=='chemins'){
			if (count($chemins)){
				$splugs .= "if (_DIR_RESTREINT) _chemin(implode(':',array(".implode(',',array_reverse($chemins['public'])).")));\n";
				$splugs .= "else _chemin(implode(':',array(".implode(',',array_reverse($chemins['prive'])).")));\n";
			}
		}
		if ($charge=='options'){
			$s .= "if (!function_exists('boutons_plugins')){function boutons_plugins(){return unserialize('".str_replace("'","\'",serialize($liste_boutons))."');}}\n";
			$s .= "if (!function_exists('onglets_plugins')){function onglets_plugins(){return unserialize('".str_replace("'","\'",serialize($liste_onglets))."');}}\n";
		}
		ecrire_fichier($fileconf, $start_file . $splugs . $s . $end_file);
	}

	if (is_array($infos)){
		// construire tableaux de pipelines et matrices et boutons
		// $GLOBALS['spip_pipeline']
		// $GLOBALS['spip_matrice']
		$liste_boutons = array();
		foreach($ordre as $p){
			$dir_type = $plugin_valides[$p]['dir_type'];
			$root_dir_type = str_replace('_DIR_','_ROOT_',$dir_type);
			$plug = $plugin_valides[$p]['dir'];
			$info = $infos[$dir_type][$plug];
			$prefix = "";
			$prefix = $info['prefix']."_";
			if (isset($info['pipeline']) AND is_array($info['pipeline'])){
				foreach($info['pipeline'] as $pipe){
					$nom = $pipe['nom'];
					if (isset($pipe['action']))
						$action = $pipe['action'];
					else
						$action = $nom;
					$nomlower = strtolower($nom);
					if ($nomlower!=$nom 
					  AND isset($GLOBALS['spip_pipeline'][$nom]) 
					  AND !isset($GLOBALS['spip_pipeline'][$nomlower])){
						$GLOBALS['spip_pipeline'][$nomlower] = $GLOBALS['spip_pipeline'][$nom];
						unset($GLOBALS['spip_pipeline'][$nom]);
					}
					$nom = $nomlower;
					if (!isset($GLOBALS['spip_pipeline'][$nom])) // creer le pipeline eventuel
						$GLOBALS['spip_pipeline'][$nom]="";
					if (strpos($GLOBALS['spip_pipeline'][$nom],"|$prefix$action")===FALSE)
						$GLOBALS['spip_pipeline'][$nom] = preg_replace(",(\|\||$),","|$prefix$action\\1",$GLOBALS['spip_pipeline'][$nom],1);
					if (isset($pipe['inclure'])){
						$GLOBALS['spip_matrice']["$prefix$action"] =
							"$root_dir_type:$plug/".$pipe['inclure'];
					}
				}
			}
		}
	}
	
	// on charge les fichiers d'options qui peuvent completer 
	// la globale spip_pipeline egalement
	if (@is_readable(_CACHE_PLUGINS_PATH))
		include_once(_CACHE_PLUGINS_PATH); // securite : a priori n'a pu etre fait plus tot 
	if (@is_readable(_CACHE_PLUGINS_OPT)) {
		include_once(_CACHE_PLUGINS_OPT);
	} else {
		spip_log("pipelines desactives: impossible de produire " . _CACHE_PLUGINS_OPT);
	}
	
	// on ajoute les pipe qui ont ete recenses manquants
	foreach($liste_pipe_manquants as $add_pipe)
		if (!isset($GLOBALS['spip_pipeline'][$add_pipe]))
			$GLOBALS['spip_pipeline'][$add_pipe]= '';

	$liste_fichier_verif2 = pipeline_precompile();
	$liste_fichier_verif = array_merge($liste_fichier_verif,$liste_fichier_verif2);

	// on note dans tmp la liste des fichiers qui doivent etre presents,
	// pour les verifier "souvent"
	// ils ne sont verifies que depuis l'espace prive, mais peuvent etre reconstruit depuis l'espace public
	// dans le cas d'un plugin non declare, spip etant mis devant le fait accompli
	// hackons donc avec un "../" en dur dans ce cas, qui ne manquera pas de nous embeter un jour...
	foreach ($liste_fichier_verif as $k => $f){
		// si un _DIR_XXX: est dans la chaine, on extrait la constante
		if (preg_match(",(_(DIR|ROOT)_[A-Z_]+):,Ums",$f,$regs))
			$f = str_replace($regs[0],$regs[2]=="ROOT"?constant($regs[1]):(_DIR_RACINE?"":"../").constant($regs[1]),$f);
		$liste_fichier_verif[$k] = $f;
	}
	ecrire_fichier(_CACHE_PLUGINS_VERIF,
		serialize($liste_fichier_verif));
	clear_path_cache();
}