Valider 976a3bc4 rédigé par esj's avatar esj
Parcourir les fichiers

Multi-base: suite au problème posé dans [10460] sur la possibilité depuis...

Multi-base: suite au problème posé dans [10460] sur la possibilité depuis [10457] d'avoir dans un unique répertoire tous les fichiers de connexions de sites partageant les mes sources, la spécification de ces fichiers, telle que décrite dans [10113] (et reprise dans [10183] et http://www.spip-contrib.net/MultiBase) subit une modification. Sont introduites deux constantes _DIR_CONNECT et _DIR_CHMOD, indiquant les répertoires où figureront le fichier décrivant la connexion et celui décrivant les droits des fichiers, en plus des constantes FILE_CONNECT_INS et FILE_CHMOD_INS. Par défaut, ces valeurs conservent le nommage habituel en {{{config/connect.php}}} et {{{config/chmod.php}}}. Lorsqu'on le référence une base externe ''A'', SPIP va à présent chercher le fichier nommé par l'expression {{{ _DIR_CONNECT . }}} ''A'' {{{ . '.php' }}}, autrement dit {{{config/}}}A{{{.php}}}. Par rapport à la spécification précédente, le préfixe {{{connect}}} a donc disparu, ce qui résoud le problème posé dans [10460].

Pour avoir dans un même répertoire tous les fichiers de connexion de sites mutualisés (et un autre pour les sauvegardes, un autre pour les Logs et un autre pour les droits), sans oublier de provoquer la vérification des droits sur les répertoires lors des installations, on peut utiliser le schéma de mutualisation suivant:

{{{
if ( preg_match(',/([a-zA-Z0-9_-]*)[/?],',$_SERVER['REQUEST_URI'],$r)) {
	if (is_dir($e = _DIR_RACINE . 'Ajouts/' . $r[1]. '/')) {
		$cookie_prefix = $table_prefix = $r[1];

		define('_SPIP_PATH', 
			_DIR_RACINE. 'Ajouts/' . $table_prefix  . '/dist/:' .
			_DIR_RACINE .'Ajouts/' . $table_prefix  . '/:' .
			_DIR_RACINE .'dist/:' .
			_DIR_RACINE .'dist/javascript/:' .
			_DIR_RESTREINT);

		$pi = $e . _NOM_PERMANENTS_INACCESSIBLES;
		$pa = $e . _NOM_PERMANENTS_ACCESSIBLES;
		$ti = $e . _NOM_TEMPORAIRES_INACCESSIBLES;
		$ta = $e . _NOM_TEMPORAIRES_ACCESSIBLES;

		$pig = _DIR_RACINE . _NOM_PERMANENTS_INACCESSIBLES;
		$tig = _DIR_RACINE . _NOM_TEMPORAIRES_INACCESSIBLES;

		define('_DIR_DUMP', $tig . 'dump/');
		define('_DIR_LOG', $tig . 'log/');
		define('_DIR_CONNECT', $pig . 'connect/');
		define('_DIR_CHMOD', $pig . 'chmod/');
		define('_FILE_CONNECT_INS', $table_prefix);
		define('_FILE_CHMOD_INS', $table_prefix);
		define('_FILE_LOG_SUFFIX', '_' . $table_prefix . '.log');

		$GLOBALS['test_dirs'] =
		  array($pa, $ta, $ti, $pig, $tig,
			_DIR_DUMP, _DIR_LOG, _DIR_CONNECT, _DIR_CHMOD);

		spip_initialisation($pi, $pa, $ti, $ta);
}}}

Seront donc créés à la racine {{{config/connect, config/chmod, tmp/log, tmp/dump}}}, le premier contenant ''A''.php pour la connexion à la base ''A'' etc.
parent 03f9a4b4
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+1 −1
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -23,7 +23,7 @@ function action_converser_dist()
	if ($lang = _request('var_lang'))
		action_converser_post($lang);
	elseif ($lang = _request('var_lang_ecrire')) {
		if ( _request('arg') AND _FILE_CONNECT) {
		if ( _request('arg') AND spip_connect()) {
			$securiser_action = charger_fonction('securiser_action', 'inc');
			$securiser_action();

+1 −1
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -117,7 +117,7 @@ function menu_langues($nom_select) {
		$base = '';
	} else {
		$cible = _DIR_RESTREINT_ABS . self();
		$base = _FILE_CONNECT ? 'base' : '';
		$base = spip_connect() ? 'base' : '';
	}

	$change = ' onchange="this.parentNode.parentNode.submit()"';
+9 −5
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -252,7 +252,7 @@ function spip_connect($serveur='') {

	$f = (!preg_match('/^\w*$/', $serveur))	? ''
	: (($serveur AND !$install) ?
		( _DIR_ETC .'connect' . $serveur . '.php')
		( _DIR_CONNECT. $serveur . '.php')
		: (_FILE_CONNECT ? _FILE_CONNECT : _FILE_CONNECT_TMP));

	unset($GLOBALS['db_ok']);
@@ -1196,19 +1196,23 @@ function spip_initialisation($pi=NULL, $pa=NULL, $ti=NULL, $ta=NULL) {
	define('_DIR_VAR', $ta);

	define('_DIR_ETC', $pi);
	define('_DIR_CONNECT', $pi);
	define('_DIR_CHMOD', $pi);

	define('_DIR_LOG', _DIR_TMP);
	define('_FILE_LOG', 'spip');
	define('_FILE_LOG_SUFFIX', '.log');

	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);

	// Le fichier de connexion a la base de donnees
	// tient compte des anciennes versions (inc_connect...)
	define('_FILE_CONNECT_INS', 'connect');
	define('_FILE_CONNECT',
		(@is_readable($f = _DIR_ETC . _FILE_CONNECT_INS . '.php') ? $f
		(@is_readable($f = _DIR_CONNECT . _FILE_CONNECT_INS . '.php') ? $f
	:	(@is_readable($f = _DIR_RESTREINT . 'inc_connect.php') ? $f
	:	(@is_readable($f = _DIR_RESTREINT . 'inc_connect.php3') ? $f
	:	false))));
@@ -1216,12 +1220,12 @@ function spip_initialisation($pi=NULL, $pa=NULL, $ti=NULL, $ta=NULL) {
	// Le fichier de reglages des droits
	define('_FILE_CHMOD_INS', 'chmod');
	define('_FILE_CHMOD',
		(@is_readable($f = _DIR_ETC . _FILE_CHMOD_INS . '.php') ? $f
		(@is_readable($f = _DIR_CHMOD . _FILE_CHMOD_INS . '.php') ? $f
	:	false));

	define('_FILE_TMP_SUFFIX', '.tmp.php');
	define('_FILE_CONNECT_TMP', _DIR_ETC . _FILE_CONNECT_INS . _FILE_TMP_SUFFIX);
	define('_FILE_CHMOD_TMP', _DIR_ETC . _FILE_CHMOD_INS . _FILE_TMP_SUFFIX);
	define('_FILE_CONNECT_TMP', _DIR_CONNECT . _FILE_CONNECT_INS . _FILE_TMP_SUFFIX);
	define('_FILE_CHMOD_TMP', _DIR_CHMOD . _FILE_CHMOD_INS . _FILE_TMP_SUFFIX);

	// Definition des droits d'acces en ecriture
	if (!defined('_SPIP_CHMOD')) {
+8 −7
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -16,7 +16,6 @@ if (defined("_TEST_DIRS")) return;
define("_TEST_DIRS", "1");

include_spip('inc/minipres');
#include_spip('inc/headers'); // fait dans inc/public
utiliser_langue_visiteur();

//
@@ -81,8 +80,10 @@ function install_etape_chmod_dist()
		if (substr($test_dir,-1)!=='/') $test_dir .= '/';
		if (!in_array($test_dir, $test_dirs)) $test_dirs[] = _DIR_RACINE  . $test_dir;
	} else {
		if (!_FILE_CONNECT)
			$test_dirs[] = _DIR_ETC;
		if (!_FILE_CONNECT) {
			$test_dirs[] = _DIR_CONNECT;
			$test_dirs[] = _DIR_CHMOD;
		}
	}

	$bad_dirs = array();
@@ -93,9 +94,9 @@ function install_etape_chmod_dist()
		if (!$test) {
			$m = preg_replace(',^' . _DIR_RACINE . ',', '',$my_dir);
			if (@file_exists($my_dir)) {
				$bad_dirs[] = "<li>".$m."</li>";
				$bad_dirs["<li>".$m."</li>"] = 1;
			} else
				$absent_dirs[] = "<li>".$m."</li>";
				$absent_dirs["<li>".$m."</li>"] = 1;
		} else $chmod = max($chmod, $test);
	}

@@ -113,14 +114,14 @@ function install_etape_chmod_dist()
	if ($bad_dirs) {
		$res .=
		  _T('dirs_repertoires_suivants',
			   array('bad_dirs' => join(" ", $bad_dirs))) .
		     array('bad_dirs' => join("\n", array_keys($bad_dirs)))) .
		  	"<b>". _T('login_recharger')."</b>.";
	}

	if ($absent_dirs) {
	  	$res .=
			_T('dirs_repertoires_absents',
			   array('bad_dirs' => join(" ", $absent_dirs))) .
			   array('bad_dirs' => join("\n", array_keys($absent_dirs)))) .
			"<b>". _T('login_recharger')."</b>.";
	}
	$res = "<p>" . $continuer  . $res . aide ("install0") . "</p>";