Valider 0c2d20db rédigé par esj's avatar esj
Parcourir les fichiers

Multi-base; rappel_nom_base et surcharche de FILE_CONNECT_INS

Un excès de zèle dans l'abstraction SQL avait rendu inopérant le test  du besoin de rappeler le nom de la base, c'est réparé.

Par ailleurs les constantes FILE_CONNECT_INS et FILE_CHMOD_INS changent légèrement de rôles afin d'évacuer quelques constantes écrites en dur dans le code, qui empêchaient des sites mutualisés de partager un même répertoire pour leur ''permanents inaccessibles''. C'est chose faite à présent, ce qui permet à chaque site mutualisé de visualiser les bases des autres en utilisant le paramètre d'URL {{{connect}}} (cf. [10183]) sans avoir à recopier leur fichier {{{connect.php}}}.

Par exemple, la mutualisation suivante dans mes_options.php:

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

		define('_FILE_CONNECT_INS', 'connect' . $table_prefix);
		define('_FILE_CHMOD_INS', 'chmod' . $table_prefix);
		spip_initialisation(
			(_DIR_RACINE /* $e */ . _NOM_PERMANENTS_INACCESSIBLES),
			($e . _NOM_PERMANENTS_ACCESSIBLES),
			($e . _NOM_TEMPORAIRES_INACCESSIBLES),
			($e . _NOM_TEMPORAIRES_ACCESSIBLES)
		       );
}}}

mettra dans le répertoire {{{config///}} de la racine les fichiers {{{connectA.php}}}, {{{connectB.php}}}, ... des différents sous-répertoires du répertoire {{{Ajout}}}, une URL de A pouvant ainsi contenir {{{connect=B}}} et inversement dès que les deux sites sont installés.
parent 12ef44ca
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+5 −4
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -24,16 +24,17 @@ function exec_upgrade_dist() {

	// Si reinstallation necessaire, message ad hoc
	if (_request('reinstall') == 'oui') {

		@copy(_FILE_CONNECT, _FILE_CONNECT_INS);

		echo minipres(_T('titre_page_upgrade'),
		include_spip('inc/minipres');
		$r = minipres(_T('titre_page_upgrade'),
				"<p><b>"
				. _T('texte_nouvelle_version_spip_1')
				. "</b><p> "
				. _T('texte_nouvelle_version_spip_2',
				   array('connect' => '<tt>' . _FILE_CONNECT . '</tt>'))
				. generer_form_ecrire('upgrade', "<input type='hidden' name='reinstall' value='non' />",'',	_T('bouton_relancer_installation')));
		echo $r;
		
		@rename(_FILE_CONNECT, _FILE_CONNECT_TMP);
		exit;
	}

+15 −10
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -247,10 +247,8 @@ function spip_connect($serveur='') {

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

	unset($GLOBALS['db_ok']);
	unset($GLOBALS['spip_connect_version']);
@@ -268,6 +266,7 @@ function spip_connect($serveur='') {
	// initialisation de l'alphabet utilise dans les connexions SQL
	// si l'installation l'a determine.
	// Celui du serveur principal l'impose aux serveurs secondaires
	// s'ils le connaissent

	if (!$serveur) {
		$charset = spip_connect_main($GLOBALS['db_ok']);
@@ -282,6 +281,7 @@ function spip_connect($serveur='') {
	}
	if ($charset != -1) {
		$f = $GLOBALS['db_ok']['set_charset'];
		if (function_exists($f))
			$f($charset, $serveur);
	}
	return $connexions[$index];
@@ -1196,19 +1196,24 @@ function spip_initialisation($pi=NULL, $pa=NULL, $ti=NULL, $ta=NULL) {
		$GLOBALS['test_dirs'] =  array($pa, $ti, $ta);

	// Le fichier de connexion a la base de donnees
	define('_FILE_CONNECT_INS', _DIR_ETC . 'connect');
	// tient compte des anciennes versions (inc_connect...)
	define('_FILE_CONNECT_INS', 'connect');
	define('_FILE_CONNECT',
		(@is_readable($f = _FILE_CONNECT_INS . '.php') ? $f
		(@is_readable($f = _DIR_ETC . _FILE_CONNECT_INS . '.php') ? $f
	:	(@is_readable($f = _DIR_RESTREINT . 'inc_connect.php') ? $f
	:	(@is_readable($f = _DIR_RESTREINT . 'inc_connect.php3') ? $f
	:	false))));

	// Le fichier de reglages des droits
	define('_FILE_CHMOD_INS', _DIR_ETC . 'chmod');
	define('_FILE_CHMOD_INS', 'chmod');
	define('_FILE_CHMOD',
		(@is_readable($f = _FILE_CHMOD_INS . '.php') ? $f
		(@is_readable($f = _DIR_ETC . _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);

	// Definition des droits d'acces en ecriture
	if (!defined('_SPIP_CHMOD')) {
		if(_FILE_CHMOD)
+4 −4
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -24,8 +24,8 @@ function install_etape_1_dist()

	$chmod = (isset($_GET['chmod']) AND preg_match(',^[0-9]+$,', $_GET['chmod']))? sprintf('%04o', $_GET['chmod']):'0777';
	// Recuperer les anciennes donnees pour plus de facilite (si presentes)
	if (@file_exists(_FILE_CONNECT_INS . _FILE_TMP . '.php')) {
		$s = @join('', @file(_FILE_CONNECT_INS . _FILE_TMP . '.php'));
	if (@file_exists(_FILE_CONNECT_TMP)) {
		$s = @join('', @file(_FILE_CONNECT_TMP));
		if (preg_match("#mysql_connect\([\"'](.*)[\"'],[\"'](.*)[\"'],[\"'](.*)[\"']\)#", $s, $regs)) {
			$adresse_db = $regs[1];
			$login_db = $regs[2];
@@ -36,8 +36,8 @@ function install_etape_1_dist()
			$login_db = $regs[3];
		}
	}
	if(@file_exists(_FILE_CHMOD_INS . _FILE_TMP . '.php')){
		$s = @join('', @file(_FILE_CHMOD_INS . _FILE_TMP . '.php'));
	if(@file_exists(_FILE_CHMOD_TMP)){
		$s = @join('', @file(_FILE_CHMOD_TMP));
		if(preg_match("#define\('_SPIP_CHMOD', (.*)\)#", $s, $regs)) {
			$chmod = $regs[1]; 
		}
+10 −8
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -123,7 +123,8 @@ function install_bases(){
			WHERE nom='version_installee'", $server_db);
	  // eliminer la derniere operation d'admin mal terminee
	  // notamment la mise a jour 
	  @$fquery("DELETE FROM spip_meta WHERE nom='import_all' OR  nom='admin'", $server_db);	}
	  @$fquery("DELETE FROM spip_meta WHERE nom='import_all' OR  nom='admin'", $server_db);
	}

	$ligne_rappel = ($server_db != 'mysql') ? ''
	: test_rappel_nom_base_mysql($server_db);
@@ -132,7 +133,7 @@ function install_bases(){
	if (!$result_ok) return "<!--\n$nouvelle $ligne_rappel\n-->";

	if($chmod) {
		install_fichier_connexion(_FILE_CHMOD_INS . _FILE_TMP . '.php', "@define('_SPIP_CHMOD', ". sprintf('0%3o',$chmod).");\n");
		install_fichier_connexion(_FILE_CHMOD_TMP, "@define('_SPIP_CHMOD', ". sprintf('0%3o',$chmod).");\n");
	}

	if (preg_match(',(.*):(.*),', $adresse_db, $r))
@@ -147,7 +148,7 @@ function install_bases(){
	. addcslashes($pass_db, "'\\") . "','$sel_db'"
	. ",'$server_db', '$table_prefix');\n";

	install_fichier_connexion(_FILE_CONNECT_INS . _FILE_TMP . '.php', $conn);
	install_fichier_connexion(_FILE_CONNECT_TMP, $conn);
	return '';
}

@@ -224,13 +225,13 @@ function install_etape_3_dist()
		$res .= "<p class='resultat'><b>"._T('avis_operation_echec')."</b></p>"._T('texte_operation_echec');
	
	else {
		if (file_exists(_FILE_CONNECT_INS . _FILE_TMP . '.php'))
			include(_FILE_CONNECT_INS . _FILE_TMP . '.php');
		if (file_exists(_FILE_CONNECT_TMP))
			include(_FILE_CONNECT_TMP);
		else
			redirige_par_entete(generer_url_ecrire('install'));
	
		if (file_exists(_FILE_CHMOD_INS . _FILE_TMP . '.php'))
			include(_FILE_CHMOD_INS . _FILE_TMP . '.php');
		if (file_exists(_FILE_CHMOD_TMP))
			include(_FILE_CHMOD_TMP);
		else
			redirige_par_entete(generer_url_ecrire('install'));

@@ -255,7 +256,8 @@ function install_etape_3_dist()
function test_rappel_nom_base_mysql($server_db)
{
	$GLOBALS['mysql_rappel_nom_base'] = true;
	$ok = sql_insert('spip_meta', "(nom,valeur)", "('mysql_rappel_nom_base', 'test')",  array(), $server_db);
	sql_delete('spip_meta', "nom='mysql_rappel_nom_base'", $server_db);
	$ok = spip_query("INSERT INTO spip_meta (nom,valeur) VALUES ('mysql_rappel_nom_base', 'test')", $server_db);

	if ($ok) {
		sql_delete('spip_meta', "nom='mysql_rappel_nom_base'", $server_db);
+19 −20
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -36,23 +36,14 @@ function install_etape_4_dist()
		exit;
	}

	if (@file_exists(_FILE_CHMOD_INS . _FILE_TMP . '.php'))
		include(_FILE_CHMOD_INS . _FILE_TMP . '.php');
	if (@file_exists(_FILE_CHMOD_TMP))
		include(_FILE_CHMOD_TMP);
	else
		redirige_par_entete(generer_url_ecrire('install'));

	if (!@file_exists(_FILE_CONNECT_INS . _FILE_TMP . '.php'))
	if (!@file_exists(_FILE_CONNECT_TMP))
		redirige_par_entete(generer_url_ecrire('install'));

	// Avec ce qui suit, spip_connect et consorts vont marcher.

	if (!@rename(_FILE_CONNECT_INS . _FILE_TMP . '.php',
		    _DIR_ETC . 'connect.php')) {
		copy(_FILE_CONNECT_INS . _FILE_TMP . '.php', 
		     _DIR_ETC . 'connect.php');
		spip_unlink(_FILE_CONNECT_INS . _FILE_TMP . '.php');
	}

	echo install_debut_html('AUTO', ' onload="document.getElementById(\'suivant\').focus();return false;"');

	echo info_etape(_T('info_derniere_etape'),
@@ -110,17 +101,25 @@ function install_etape_4_dist()
	spip_unlink($htpasswd."-admin");
	ecrire_acces();

	if (!@rename(_FILE_CHMOD_INS . _FILE_TMP . '.php',
		    _DIR_ETC . 'chmod.php')) {
		copy(_FILE_CHMOD_INS . _FILE_TMP . '.php', 
		     _DIR_ETC . 'chmod.php');
		spip_unlink(_FILE_CHMOD_INS . _FILE_TMP . '.php');
	}

	// et on l'envoie dans l'espace prive
	// on l'envoie dans l'espace prive
	echo generer_form_ecrire('accueil', bouton_suivant());
	echo info_progression_etape(4,'etape_','install/');
	echo install_fin_html();

	// et on perennise

	$f = str_replace( _FILE_TMP_SUFFIX, '.php', _FILE_CHMOD_TMP);
	if (!@rename(_FILE_CHMOD_TMP, $f)) {
		if (@copy(_FILE_CHMOD_TMP, $f))
			spip_unlink(_FILE_CHMOD_TMP);
	}

	$f = str_replace( _FILE_TMP_SUFFIX, '.php', _FILE_CONNECT_TMP);
	if (!@rename(_FILE_CONNECT_TMP, $f)) {
		if (@copy(_FILE_CONNECT_TMP, $f))
			@spip_unlink(_FILE_CONNECT_TMP);
	}

}

?>
Chargement en cours