From 12ef44ca19a27555b1bc8603ee9d9c8ca023ab9c Mon Sep 17 00:00:00 2001
From: "Committo,Ergo:sum" <esj@rezo.net>
Date: Sat, 29 Sep 2007 10:54:43 +0000
Subject: [PATCH] =?UTF-8?q?Int=C3=A9grer=20le=20renouvellement=20de=20l'al?=
 =?UTF-8?q?ea=20=C3=A0=20l'initialisation=20des=20meta=20pour=20=C3=A9vite?=
 =?UTF-8?q?r=20de=20refaire=20deux=20fois=20suite=20le=20cache=20dans=20ce?=
 =?UTF-8?q?=20cas=20l=C3=A0.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Se servir de la différence entre sql_serveur et spip_query (si serveur non configuré, pas d'erreur fatale avec la 2e) pour éviter des redondances de tests, surtout impliquant les lourdeurs autour de FILE_CONNECT et FILE_CONNECT_INS.
---
 ecrire/inc/meta.php  | 35 ++++++++++++++++++++++-------------
 ecrire/inc/utils.php | 17 ++++++-----------
 2 files changed, 28 insertions(+), 24 deletions(-)

diff --git a/ecrire/inc/meta.php b/ecrire/inc/meta.php
index bd1c1dfaab..2d3de62d05 100644
--- a/ecrire/inc/meta.php
+++ b/ecrire/inc/meta.php
@@ -16,26 +16,34 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
 // Recopie dans le tableau PHP global meta, car on en a souvent besoin
 
 // http://doc.spip.org/@init_metas
-function init_metas()
+function inc_meta_dist()
 {
 	// Lire les meta, en cache si present, valide et lisible
-	if (jeune_fichier(_FILE_META, 1<<24)
-	AND lire_fichier(_FILE_META, $meta))
+	if ($old = (jeune_fichier(_FILE_META, 1<<24)
+			AND lire_fichier(_FILE_META, $meta)))
 		$GLOBALS['meta'] = @unserialize($meta);
-	// sinon le refaire.
-	if (!$GLOBALS['meta']) {
-		if (lire_metas())
-			ecrire_fichier(_FILE_META,
-				       serialize($GLOBALS['meta']));
+	// sinon lire en base
+	if (!$GLOBALS['meta']) $old = !lire_metas();
+	// renouveller l'alea au besoin
+	if (test_espace_prive()
+	AND $GLOBALS['meta']
+	AND (time() > _RENOUVELLE_ALEA +  @$GLOBALS['meta']['alea_ephemere_date'])) {
+			include_spip('inc/acces');
+			renouvelle_alea();
 	}
+	// et refaire le cache si on a pu lire
+
+	if (!$old) ecrire_fichier(_FILE_META, serialize($GLOBALS['meta']));
 }
 
+// fonctions aussi appelees a l'install ==> spip_query en premiere requete 
+// pour eviter l'erreur fatale (serveur non encore configure)
+
 // http://doc.spip.org/@lire_metas
 function lire_metas() {
-	if (!_FILE_CONNECT && !@file_exists(_FILE_CONNECT_INS .'.php'))
-		return false;
-	if ($result = @spip_query("SELECT nom,valeur FROM spip_meta")) {
 
+	if ($result = spip_query("SELECT nom,valeur FROM spip_meta")) {
+		include_spip('base/abstract_sql');
 		$GLOBALS['meta'] = array();
 		while ($row = sql_fetch($result))
 			$GLOBALS['meta'][$row['nom']] = $row['valeur'];
@@ -61,9 +69,10 @@ function ecrire_meta($nom, $valeur, $importable = NULL) {
 
 	if (!$nom) return;
 	$GLOBALS['meta'][$nom] = $valeur;
-	if (!_FILE_CONNECT && !@file_exists(_FILE_CONNECT_INS .'.php')) return;
+	$res = spip_query("SELECT impt,valeur FROM spip_meta WHERE nom=" . _q($nom));
+	if (!$res) return; 
 	include_spip('base/abstract_sql');
-	$res = sql_fetsel("impt,valeur", 'spip_meta', "nom=" . _q($nom));
+	$res = sql_fetch($res);
 	// conserver la valeur de impt si existante
 	// et ne pas invalider le cache si affectation a l'identique
 	if ($res AND $valeur == $res['valeur']) return;
diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php
index c8966feaa0..9750ea42c6 100644
--- a/ecrire/inc/utils.php
+++ b/ecrire/inc/utils.php
@@ -256,7 +256,9 @@ function spip_connect($serveur='') {
 	unset($GLOBALS['spip_connect_version']);
 	if ($f AND is_readable($f)) include($f);
 	if (!isset($GLOBALS['db_ok'])) {
+		if ($install) return false; // fera mieux la prochaine fois
 		spip_log("spip_connect: serveur $index mal defini dans '$f'.");
+		// ne plus reessayer si ce n'est pas l'install
 		return $connexions[$index]=false;
 	}
 
@@ -1332,21 +1334,14 @@ function spip_initialisation($pi=NULL, $pa=NULL, $ti=NULL, $ta=NULL) {
 	// pour le rendre surchargeable, on va provoquer un reecriture
 	// systematique du noyau ou une baisse de perfs => a etudier)
 	include_once _DIR_RESTREINT . 'inc/flock.php';
-	include_spip('inc/meta'); // surchargeable, mais difficilement.
 
 	// Duree de validite de l'alea pour les cookies et ce qui s'ensuit.
 	define('_RENOUVELLE_ALEA', 12 * 3600);
 
-	if  (_FILE_CONNECT) {
-		init_metas();
-		// Forcer le renouvellement de l'alea
-
-		if (test_espace_prive()
-		AND (time() > _RENOUVELLE_ALEA +  @$GLOBALS['meta']['alea_ephemere_date'])) {
-			include_spip('inc/acces');
-			renouvelle_alea();
-		}
-	}
+	// charger les meta si possible et renouveller l'alea au besoin
+	// charge aussi effacer_meta et ecrire_meta
+	$init_meta = charger_fonction('meta', 'inc'); 
+	$init_meta();
 
 	// nombre de repertoires depuis la racine
 	// on compare a l'adresse donnee en meta ; si celle-ci est fausse
-- 
GitLab