function spip_connect($serveur = '', $version = '') { global $connexions, $spip_sql_version; $serveur = !is_string($serveur) ? '' : strtolower($serveur); $index = $serveur ? $serveur : 0; if (!$version) { $version = $spip_sql_version; } if (isset($connexions[$index][$version])) { return $connexions[$index]; } include_spip('base/abstract_sql'); $install = _request('exec') == 'install'; // Premiere connexion ? if (!($old = isset($connexions[$index]))) { $f = !preg_match('/^[\\w\\.]*$/', $serveur) ? '' : ($serveur ? _DIR_CONNECT . $serveur . '.php' : (_FILE_CONNECT ? _FILE_CONNECT : ($install ? _FILE_CONNECT_TMP : ''))); // installation pas faite unset($GLOBALS['db_ok']); unset($GLOBALS['spip_connect_version']); if ($f) { if (is_readable($f)) { include $f; } elseif ($serveur and !$install) { // chercher une declaration de serveur dans le path // qui pourra un jour servir a declarer des bases sqlite // par des plugins. Et sert aussi aux boucles POUR. find_in_path("{$serveur}.php", 'connect/', true); } } if (!isset($GLOBALS['db_ok'])) { // fera mieux la prochaine fois if ($install) { return false; } if ($f and is_readable($f)) { spip_log("spip_connect: fichier de connexion '{$f}' OK.", _LOG_INFO_IMPORTANTE); } else { spip_log("spip_connect: fichier de connexion '{$f}' non trouve", _LOG_INFO_IMPORTANTE); } spip_log("spip_connect: echec connexion ou serveur {$index} mal defini dans '{$f}'.", _LOG_HS); // ne plus reessayer si ce n'est pas l'install return $connexions[$index] = false; } $connexions[$index] = $GLOBALS['db_ok']; } // si la connexion a deja ete tentee mais a echoue, le dire! if (!$connexions[$index]) { return false; } // la connexion a reussi ou etait deja faite. // chargement de la version du jeu de fonctions // si pas dans le fichier par defaut $type = $GLOBALS['db_ok']['type']; $jeu = 'spip_' . $type . '_functions_' . $version; if (!isset($GLOBALS[$jeu])) { if (!find_in_path($type . '_' . $version . '.php', 'req/', true)) { spip_log("spip_connect: serveur {$index} version '{$version}' non defini pour '{$type}'", _LOG_HS); // ne plus reessayer return $connexions[$index][$version] = array(); } } $connexions[$index][$version] = $GLOBALS[$jeu]; if ($old) { return $connexions[$index]; } $connexions[$index]['spip_connect_version'] = isset($GLOBALS['spip_connect_version']) ? $GLOBALS['spip_connect_version'] : 0; // 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[$jeu]); if (!$charset) { unset($connexions[$index]); spip_log("spip_connect: absence de charset", _LOG_AVERTISSEMENT); return false; } } else { // spip_meta n'existe pas toujours dans la base // C'est le cas d'un dump sqlite par exemple if ($connexions[$index]['spip_connect_version'] and sql_showtable('spip_meta', true, $serveur) and $r = sql_getfetsel('valeur', 'spip_meta', "nom='charset_sql_connexion'", '', '', '', '', $serveur)) { $charset = $r; } else { $charset = -1; } } if ($charset != -1) { $f = $GLOBALS[$jeu]['set_charset']; if (function_exists($f)) { $f($charset, $serveur); } } return $connexions[$index]; }
function spip_connect($serveur='', $version='') { global $connexions, $spip_sql_version; $serveur = !is_string($serveur) ? '' : strtolower($serveur); $index = $serveur ? $serveur : 0; if (!$version) $version = $spip_sql_version; if (isset($connexions[$index][$version])) return $connexions[$index]; include_spip('base/abstract_sql'); $install = (_request('exec') == 'install'); // Premiere connexion ? if (!($old = isset($connexions[$index]))) { $f = (!preg_match('/^[\w\.]*$/', $serveur)) ? '' // nom de serveur mal ecrit : ($serveur ? ( _DIR_CONNECT. $serveur . '.php') // serveur externe : (_FILE_CONNECT ? _FILE_CONNECT // serveur principal ok : ($install ? _FILE_CONNECT_TMP // init du serveur principal : ''))); // installation pas faite unset($GLOBALS['db_ok']); unset($GLOBALS['spip_connect_version']); if ($f) { if (is_readable($f)) { include($f); } elseif ($serveur AND !$install) { // chercher une declaration de serveur dans le path // qui pourra un jour servir a declarer des bases sqlite // par des plugins. Et sert aussi aux boucles POUR. find_in_path("$serveur.php",'connect/',true); } } if (!isset($GLOBALS['db_ok'])) { // fera mieux la prochaine fois if ($install) return false; spip_log("spip_connect: serveur $index mal defini dans '$f'. spip_connect_version: " . @$GLOBALS['spip_connect_version']); // ne plus reessayer si ce n'est pas l'install return $connexions[$index]=false; } $connexions[$index] = $GLOBALS['db_ok']; } // si la connexion a deja ete tentee mais a echoue, le dire! if (!$connexions[$index]) return false; // la connexion a reussi ou etait deja faite. // chargement de la version du jeu de fonctions // si pas dans le fichier par defaut $type = $GLOBALS['db_ok']['type']; $jeu = 'spip_' . $type .'_functions_' . $version; if (!isset($GLOBALS[$jeu])) { if (!find_in_path($type . '_' . $version . '.php', 'req/', true)){ spip_log("spip_connect: serveur $index version '$version' non defini pour '$type'"); // ne plus reessayer return $connexions[$index][$version] = array(); } } $connexions[$index][$version] = $GLOBALS[$jeu]; if ($old) return $connexions[$index]; $connexions[$index]['spip_connect_version'] = isset($GLOBALS['spip_connect_version']) ? $GLOBALS['spip_connect_version'] : 0; // 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[$jeu]); if (!$charset) { unset($connexions[$index]); spip_log("spip_connect: absence de charset"); return false; } } else { if ($connexions[$index]['spip_connect_version'] AND $r = sql_getfetsel('valeur', 'spip_meta', "nom='charset_sql_connexion'",'','','','',$serveur)) $charset = $r; else $charset = -1; } if ($charset != -1) { $f = $GLOBALS[$jeu]['set_charset']; if (function_exists($f)) $f($charset, $serveur); } return $connexions[$index]; }