From 0c2d20db47bccdb32ce208cd6a4a495fdc14af0b Mon Sep 17 00:00:00 2001 From: "Committo,Ergo:sum" <esj@rezo.net> Date: Sat, 29 Sep 2007 18:57:31 +0000 Subject: [PATCH] Multi-base; rappel_nom_base et surcharche de FILE_CONNECT_INS MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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. --- ecrire/exec/upgrade.php | 9 ++++---- ecrire/inc/utils.php | 25 +++++++++++++--------- ecrire/install/etape_1.php | 8 +++---- ecrire/install/etape_3.php | 18 +++++++++------- ecrire/install/etape_4.php | 39 +++++++++++++++++----------------- ecrire/install/etape_chmod.php | 4 ++-- ecrire/install/etape_ldap4.php | 4 ++-- ecrire/install/etape_ldap5.php | 4 ++-- 8 files changed, 59 insertions(+), 52 deletions(-) diff --git a/ecrire/exec/upgrade.php b/ecrire/exec/upgrade.php index ad2229d982..d3e4021353 100644 --- a/ecrire/exec/upgrade.php +++ b/ecrire/exec/upgrade.php @@ -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; } diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php index 9750ea42c6..de04cde989 100644 --- a/ecrire/inc/utils.php +++ b/ecrire/inc/utils.php @@ -246,11 +246,9 @@ function spip_connect($serveur='') { $install = (_request('exec') == 'install'); $f = (!preg_match('/^\w*$/', $serveur)) ? '' - : (($serveur AND !$install) ? - (_FILE_CONNECT_INS . $serveur . '.php') - : (_FILE_CONNECT ? _FILE_CONNECT - : ($install ? (_FILE_CONNECT_INS . '.php') - : ''))); + : (($serveur AND !$install) ? + ( _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,7 +281,8 @@ function spip_connect($serveur='') { } if ($charset != -1) { $f = $GLOBALS['db_ok']['set_charset']; - $f($charset, $serveur); + 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) diff --git a/ecrire/install/etape_1.php b/ecrire/install/etape_1.php index 2453d89ca6..2e835980e5 100644 --- a/ecrire/install/etape_1.php +++ b/ecrire/install/etape_1.php @@ -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]; } diff --git a/ecrire/install/etape_3.php b/ecrire/install/etape_3.php index cdb54b1850..cbd173f654 100644 --- a/ecrire/install/etape_3.php +++ b/ecrire/install/etape_3.php @@ -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); diff --git a/ecrire/install/etape_4.php b/ecrire/install/etape_4.php index a118439661..42e69a99ba 100644 --- a/ecrire/install/etape_4.php +++ b/ecrire/install/etape_4.php @@ -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); + } + } ?> diff --git a/ecrire/install/etape_chmod.php b/ecrire/install/etape_chmod.php index 44a7479a82..86ce36384d 100644 --- a/ecrire/install/etape_chmod.php +++ b/ecrire/install/etape_chmod.php @@ -68,7 +68,7 @@ function test_ecrire($my_dir) { // // 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() @@ -82,7 +82,7 @@ function install_etape_chmod_dist() if (!in_array($test_dir, $test_dirs)) $test_dirs[] = _DIR_RACINE . $test_dir; } else { if (!_FILE_CONNECT) - $test_dirs[] = dirname(_FILE_CONNECT_INS).'/'; + $test_dirs[] = _DIR_ETC; } $bad_dirs = array(); diff --git a/ecrire/install/etape_ldap4.php b/ecrire/install/etape_ldap4.php index 387c22826e..74029bc090 100644 --- a/ecrire/install/etape_ldap4.php +++ b/ecrire/install/etape_ldap4.php @@ -41,7 +41,7 @@ function install_etape_ldap4_dist() else { 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, '?'.'>')) $conn = substr($conn, 0, $p); if (!strpos($conn, 'spip_connect_ldap')) { @@ -59,7 +59,7 @@ function install_etape_ldap4_dist() $conn .= "\$GLOBALS['ldap_present'] = true;\n"; } $conn .= "?".">"; - ecrire_fichier(_FILE_CONNECT_INS . _FILE_TMP . '.php', $conn); + ecrire_fichier(_FILE_CONNECT_TMP, $conn); $statuts = liste_statuts_ldap(); $statut_ldap = defined('_INSTALL_STATUT_LDAP') ? _INSTALL_STATUT_LDAP diff --git a/ecrire/install/etape_ldap5.php b/ecrire/install/etape_ldap5.php index 6d9e6becec..c686191d7f 100644 --- a/ecrire/install/etape_ldap5.php +++ b/ecrire/install/etape_ldap5.php @@ -18,8 +18,8 @@ function install_etape_ldap5_dist() { // _FILE_CONNECT n'existe pas encore - 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')); -- GitLab