Valider ea690fd6 rédigé par cerdic's avatar cerdic
Parcourir les fichiers

Quand on passe la valeure speciale @test@ a $db dans spip_connect_db, celui-ci...

Quand on passe la valeure speciale @test@ a $db dans spip_connect_db, celui-ci l'ignore et s'abstient egalement de poser un fichier .out en cas de connexion échouee.

Par ailleurs, on identifie le fichier .out par un hash de $host.$port.$db car il est abusif de déclarer tous les serveurs mysql down sous pretexte qu'un n'a pas répondu !

Avant ces deux modifs, une tentative de connexion echouee sur un serveur pour declarer une autre base faisait tomber le site en ligne ...
parent 0b8bb0f9
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+38 −13
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -144,25 +144,50 @@ function spip_connect_sql($version, $ins='', $serveur='', $cont=false) {
	exit;
}

// Fonction appelee par le fichier cree dans config/ a l'instal'.
// Il contient un appel direct a cette fonction avec comme arguments
// les identifants de connexion.
// Si la connexion reussit, la globale db_ok memorise sa description.
// C'est un tableau egalement retourne en valeur, pour les appels a l'install'

// http://doc.spip.org/@spip_connect_db
/**
 * Fonction appelee par le fichier cree dans config/ a l'instal'.
 * Il contient un appel direct a cette fonction avec comme arguments
 * les identifants de connexion.
 * Si la connexion reussit, la globale db_ok memorise sa description.
 * C'est un tableau egalement retourne en valeur, pour les appels a l'install'
 *
 * http://doc.spip.org/@spip_connect_db
 *
 * @param string $host
 * @param string $port
 * @param string $login
 * @param string $pass
 * @param string $db
 * @param string $type
 * @param string $prefixe
 * @param string $auth
 * @return array
 */
function spip_connect_db($host, $port, $login, $pass, $db='', $type='mysql', $prefixe='', $auth='') {
	global $db_ok;

	## TODO : mieux differencier les serveurs
	$f = _DIR_TMP . $type . 'out';
	// temps avant nouvelle tentative de connexion
	// suite a une connection echouee
	if (!defined('_CONNECT_RETRY_DELAY'))
		define('_CONNECT_RETRY_DELAY',30);

	$f = "";
	// un fichier de identifiant par combinaison (type,host,port,db)
	// pour ne pas declarer tout indisponible d'un coup
	// si en cours d'installation ou si db=@test@ on ne pose rien
	// car c'est un test de connexion
	if (!defined('_ECRIRE_INSTALL') AND !$db=="@test@")
		$f = _DIR_TMP . $type . '.' . substr(md5($host.$port.$db),0,8) . '.out';
	elseif ($db=='@test@')
		$db = '';

	if (@file_exists($f)
	AND (time() - @filemtime($f) < 30)
	AND !defined('_ECRIRE_INSTALL')) {
	if ($f
		AND @file_exists($f)
	  AND (time() - @filemtime($f) < _CONNECT_RETRY_DELAY)) {
		spip_log( "Echec : $f recent. Pas de tentative de connexion", _LOG_HS);
		return;
	}

	if (!$prefixe)
		$prefixe = isset($GLOBALS['table_prefix'])
		? $GLOBALS['table_prefix'] : $db;
@@ -183,7 +208,7 @@ function spip_connect_db($host, $port, $login, $pass, $db='', $type='mysql', $pr
		return $db_ok = $g;
	}
	// En cas d'indisponibilite du serveur, eviter de le bombarder
	if (!defined('_ECRIRE_INSTALL')) {
	if ($f) {
		@touch($f);
		spip_log( "Echec connexion serveur $type : host[$host] port[$port] login[$login] base[$db]", $type.'.'._LOG_HS);
	}