Skip to content
Extraits de code Groupes Projets
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
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -24,16 +24,17 @@ function exec_upgrade_dist() { ...@@ -24,16 +24,17 @@ function exec_upgrade_dist() {
// Si reinstallation necessaire, message ad hoc // Si reinstallation necessaire, message ad hoc
if (_request('reinstall') == 'oui') { if (_request('reinstall') == 'oui') {
include_spip('inc/minipres');
@copy(_FILE_CONNECT, _FILE_CONNECT_INS); $r = minipres(_T('titre_page_upgrade'),
echo minipres(_T('titre_page_upgrade'),
"<p><b>" "<p><b>"
. _T('texte_nouvelle_version_spip_1') . _T('texte_nouvelle_version_spip_1')
. "</b><p> " . "</b><p> "
. _T('texte_nouvelle_version_spip_2', . _T('texte_nouvelle_version_spip_2',
array('connect' => '<tt>' . _FILE_CONNECT . '</tt>')) array('connect' => '<tt>' . _FILE_CONNECT . '</tt>'))
. generer_form_ecrire('upgrade', "<input type='hidden' name='reinstall' value='non' />",'', _T('bouton_relancer_installation'))); . generer_form_ecrire('upgrade', "<input type='hidden' name='reinstall' value='non' />",'', _T('bouton_relancer_installation')));
echo $r;
@rename(_FILE_CONNECT, _FILE_CONNECT_TMP);
exit; exit;
} }
......
...@@ -246,11 +246,9 @@ function spip_connect($serveur='') { ...@@ -246,11 +246,9 @@ function spip_connect($serveur='') {
$install = (_request('exec') == 'install'); $install = (_request('exec') == 'install');
$f = (!preg_match('/^\w*$/', $serveur)) ? '' $f = (!preg_match('/^\w*$/', $serveur)) ? ''
: (($serveur AND !$install) ? : (($serveur AND !$install) ?
(_FILE_CONNECT_INS . $serveur . '.php') ( _DIR_ETC . _FILE_CONNECT_INS . $serveur . '.php')
: (_FILE_CONNECT ? _FILE_CONNECT : (_FILE_CONNECT ? _FILE_CONNECT : _FILE_CONNECT_TMP));
: ($install ? (_FILE_CONNECT_INS . '.php')
: '')));
unset($GLOBALS['db_ok']); unset($GLOBALS['db_ok']);
unset($GLOBALS['spip_connect_version']); unset($GLOBALS['spip_connect_version']);
...@@ -268,6 +266,7 @@ function spip_connect($serveur='') { ...@@ -268,6 +266,7 @@ function spip_connect($serveur='') {
// initialisation de l'alphabet utilise dans les connexions SQL // initialisation de l'alphabet utilise dans les connexions SQL
// si l'installation l'a determine. // si l'installation l'a determine.
// Celui du serveur principal l'impose aux serveurs secondaires // Celui du serveur principal l'impose aux serveurs secondaires
// s'ils le connaissent
if (!$serveur) { if (!$serveur) {
$charset = spip_connect_main($GLOBALS['db_ok']); $charset = spip_connect_main($GLOBALS['db_ok']);
...@@ -282,7 +281,8 @@ function spip_connect($serveur='') { ...@@ -282,7 +281,8 @@ function spip_connect($serveur='') {
} }
if ($charset != -1) { if ($charset != -1) {
$f = $GLOBALS['db_ok']['set_charset']; $f = $GLOBALS['db_ok']['set_charset'];
$f($charset, $serveur); if (function_exists($f))
$f($charset, $serveur);
} }
return $connexions[$index]; return $connexions[$index];
} }
...@@ -1196,19 +1196,24 @@ function spip_initialisation($pi=NULL, $pa=NULL, $ti=NULL, $ta=NULL) { ...@@ -1196,19 +1196,24 @@ function spip_initialisation($pi=NULL, $pa=NULL, $ti=NULL, $ta=NULL) {
$GLOBALS['test_dirs'] = array($pa, $ti, $ta); $GLOBALS['test_dirs'] = array($pa, $ti, $ta);
// Le fichier de connexion a la base de donnees // 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', 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.php') ? $f
: (@is_readable($f = _DIR_RESTREINT . 'inc_connect.php3') ? $f : (@is_readable($f = _DIR_RESTREINT . 'inc_connect.php3') ? $f
: false)))); : false))));
// Le fichier de reglages des droits // Le fichier de reglages des droits
define('_FILE_CHMOD_INS', _DIR_ETC . 'chmod'); define('_FILE_CHMOD_INS', 'chmod');
define('_FILE_CHMOD', define('_FILE_CHMOD',
(@is_readable($f = _FILE_CHMOD_INS . '.php') ? $f (@is_readable($f = _DIR_ETC . _FILE_CHMOD_INS . '.php') ? $f
: false)); : 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 // Definition des droits d'acces en ecriture
if (!defined('_SPIP_CHMOD')) { if (!defined('_SPIP_CHMOD')) {
if(_FILE_CHMOD) if(_FILE_CHMOD)
......
...@@ -24,8 +24,8 @@ function install_etape_1_dist() ...@@ -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'; $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) // Recuperer les anciennes donnees pour plus de facilite (si presentes)
if (@file_exists(_FILE_CONNECT_INS . _FILE_TMP . '.php')) { if (@file_exists(_FILE_CONNECT_TMP)) {
$s = @join('', @file(_FILE_CONNECT_INS . _FILE_TMP . '.php')); $s = @join('', @file(_FILE_CONNECT_TMP));
if (preg_match("#mysql_connect\([\"'](.*)[\"'],[\"'](.*)[\"'],[\"'](.*)[\"']\)#", $s, $regs)) { if (preg_match("#mysql_connect\([\"'](.*)[\"'],[\"'](.*)[\"'],[\"'](.*)[\"']\)#", $s, $regs)) {
$adresse_db = $regs[1]; $adresse_db = $regs[1];
$login_db = $regs[2]; $login_db = $regs[2];
...@@ -36,8 +36,8 @@ function install_etape_1_dist() ...@@ -36,8 +36,8 @@ function install_etape_1_dist()
$login_db = $regs[3]; $login_db = $regs[3];
} }
} }
if(@file_exists(_FILE_CHMOD_INS . _FILE_TMP . '.php')){ if(@file_exists(_FILE_CHMOD_TMP)){
$s = @join('', @file(_FILE_CHMOD_INS . _FILE_TMP . '.php')); $s = @join('', @file(_FILE_CHMOD_TMP));
if(preg_match("#define\('_SPIP_CHMOD', (.*)\)#", $s, $regs)) { if(preg_match("#define\('_SPIP_CHMOD', (.*)\)#", $s, $regs)) {
$chmod = $regs[1]; $chmod = $regs[1];
} }
......
...@@ -123,7 +123,8 @@ function install_bases(){ ...@@ -123,7 +123,8 @@ function install_bases(){
WHERE nom='version_installee'", $server_db); WHERE nom='version_installee'", $server_db);
// eliminer la derniere operation d'admin mal terminee // eliminer la derniere operation d'admin mal terminee
// notamment la mise a jour // 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') ? '' $ligne_rappel = ($server_db != 'mysql') ? ''
: test_rappel_nom_base_mysql($server_db); : test_rappel_nom_base_mysql($server_db);
...@@ -132,7 +133,7 @@ function install_bases(){ ...@@ -132,7 +133,7 @@ function install_bases(){
if (!$result_ok) return "<!--\n$nouvelle $ligne_rappel\n-->"; if (!$result_ok) return "<!--\n$nouvelle $ligne_rappel\n-->";
if($chmod) { 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)) if (preg_match(',(.*):(.*),', $adresse_db, $r))
...@@ -147,7 +148,7 @@ function install_bases(){ ...@@ -147,7 +148,7 @@ function install_bases(){
. addcslashes($pass_db, "'\\") . "','$sel_db'" . addcslashes($pass_db, "'\\") . "','$sel_db'"
. ",'$server_db', '$table_prefix');\n"; . ",'$server_db', '$table_prefix');\n";
install_fichier_connexion(_FILE_CONNECT_INS . _FILE_TMP . '.php', $conn); install_fichier_connexion(_FILE_CONNECT_TMP, $conn);
return ''; return '';
} }
...@@ -224,13 +225,13 @@ function install_etape_3_dist() ...@@ -224,13 +225,13 @@ function install_etape_3_dist()
$res .= "<p class='resultat'><b>"._T('avis_operation_echec')."</b></p>"._T('texte_operation_echec'); $res .= "<p class='resultat'><b>"._T('avis_operation_echec')."</b></p>"._T('texte_operation_echec');
else { else {
if (file_exists(_FILE_CONNECT_INS . _FILE_TMP . '.php')) if (file_exists(_FILE_CONNECT_TMP))
include(_FILE_CONNECT_INS . _FILE_TMP . '.php'); include(_FILE_CONNECT_TMP);
else else
redirige_par_entete(generer_url_ecrire('install')); redirige_par_entete(generer_url_ecrire('install'));
if (file_exists(_FILE_CHMOD_INS . _FILE_TMP . '.php')) if (file_exists(_FILE_CHMOD_TMP))
include(_FILE_CHMOD_INS . _FILE_TMP . '.php'); include(_FILE_CHMOD_TMP);
else else
redirige_par_entete(generer_url_ecrire('install')); redirige_par_entete(generer_url_ecrire('install'));
...@@ -255,7 +256,8 @@ function install_etape_3_dist() ...@@ -255,7 +256,8 @@ function install_etape_3_dist()
function test_rappel_nom_base_mysql($server_db) function test_rappel_nom_base_mysql($server_db)
{ {
$GLOBALS['mysql_rappel_nom_base'] = true; $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) { if ($ok) {
sql_delete('spip_meta', "nom='mysql_rappel_nom_base'", $server_db); sql_delete('spip_meta', "nom='mysql_rappel_nom_base'", $server_db);
......
...@@ -36,23 +36,14 @@ function install_etape_4_dist() ...@@ -36,23 +36,14 @@ function install_etape_4_dist()
exit; exit;
} }
if (@file_exists(_FILE_CHMOD_INS . _FILE_TMP . '.php')) if (@file_exists(_FILE_CHMOD_TMP))
include(_FILE_CHMOD_INS . _FILE_TMP . '.php'); include(_FILE_CHMOD_TMP);
else else
redirige_par_entete(generer_url_ecrire('install')); 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')); 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 install_debut_html('AUTO', ' onload="document.getElementById(\'suivant\').focus();return false;"');
echo info_etape(_T('info_derniere_etape'), echo info_etape(_T('info_derniere_etape'),
...@@ -110,17 +101,25 @@ function install_etape_4_dist() ...@@ -110,17 +101,25 @@ function install_etape_4_dist()
spip_unlink($htpasswd."-admin"); spip_unlink($htpasswd."-admin");
ecrire_acces(); ecrire_acces();
if (!@rename(_FILE_CHMOD_INS . _FILE_TMP . '.php', // on l'envoie dans l'espace prive
_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
echo generer_form_ecrire('accueil', bouton_suivant()); echo generer_form_ecrire('accueil', bouton_suivant());
echo info_progression_etape(4,'etape_','install/'); echo info_progression_etape(4,'etape_','install/');
echo install_fin_html(); 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);
}
} }
?> ?>
...@@ -68,7 +68,7 @@ function test_ecrire($my_dir) { ...@@ -68,7 +68,7 @@ function test_ecrire($my_dir) {
// //
// tester les droits en ecriture sur les repertoires // tester les droits en ecriture sur les repertoires
// rajouter celui passer dans l'url ou celui du source (a l'installation) // rajouter celui passe dans l'url ou celui du source (a l'installation)
// //
function install_etape_chmod_dist() function install_etape_chmod_dist()
...@@ -82,7 +82,7 @@ function install_etape_chmod_dist() ...@@ -82,7 +82,7 @@ function install_etape_chmod_dist()
if (!in_array($test_dir, $test_dirs)) $test_dirs[] = _DIR_RACINE . $test_dir; if (!in_array($test_dir, $test_dirs)) $test_dirs[] = _DIR_RACINE . $test_dir;
} else { } else {
if (!_FILE_CONNECT) if (!_FILE_CONNECT)
$test_dirs[] = dirname(_FILE_CONNECT_INS).'/'; $test_dirs[] = _DIR_ETC;
} }
$bad_dirs = array(); $bad_dirs = array();
......
...@@ -41,7 +41,7 @@ function install_etape_ldap4_dist() ...@@ -41,7 +41,7 @@ function install_etape_ldap4_dist()
else { else {
info_etape(_T('info_reglage_ldap')); info_etape(_T('info_reglage_ldap'));
lire_fichier(_FILE_CONNECT_INS . _FILE_TMP . '.php', $conn); lire_fichier(_FILE_CONNECT_TMP, $conn);
if ($p = strpos($conn, '?'.'>')) if ($p = strpos($conn, '?'.'>'))
$conn = substr($conn, 0, $p); $conn = substr($conn, 0, $p);
if (!strpos($conn, 'spip_connect_ldap')) { if (!strpos($conn, 'spip_connect_ldap')) {
...@@ -59,7 +59,7 @@ function install_etape_ldap4_dist() ...@@ -59,7 +59,7 @@ function install_etape_ldap4_dist()
$conn .= "\$GLOBALS['ldap_present'] = true;\n"; $conn .= "\$GLOBALS['ldap_present'] = true;\n";
} }
$conn .= "?".">"; $conn .= "?".">";
ecrire_fichier(_FILE_CONNECT_INS . _FILE_TMP . '.php', $conn); ecrire_fichier(_FILE_CONNECT_TMP, $conn);
$statuts = liste_statuts_ldap(); $statuts = liste_statuts_ldap();
$statut_ldap = defined('_INSTALL_STATUT_LDAP') $statut_ldap = defined('_INSTALL_STATUT_LDAP')
? _INSTALL_STATUT_LDAP ? _INSTALL_STATUT_LDAP
......
...@@ -18,8 +18,8 @@ function install_etape_ldap5_dist() ...@@ -18,8 +18,8 @@ function install_etape_ldap5_dist()
{ {
// _FILE_CONNECT n'existe pas encore // _FILE_CONNECT n'existe pas encore
if (@file_exists(_FILE_CONNECT_INS . _FILE_TMP . '.php')) if (@file_exists(_FILE_CONNECT_TMP))
include(_FILE_CONNECT_INS . _FILE_TMP . '.php'); include(_FILE_CONNECT_TMP);
else else
redirige_par_entete(generer_url_ecrire('install')); redirige_par_entete(generer_url_ecrire('install'));
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter