Beispiel #1
0
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];
}
Beispiel #2
0
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];
}