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