Dépôt officiel du core SPIP * Anciennement présent sur svn://trac.rezo.net/spip * Les plugins-dist faisant partie de la distribution SPIP sont présents dans https://git.spip.net/SPIP/[nom du plugin dist] https://www.spip.net
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

99 lines
3.5 KiB

<?php
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
* Copyright (c) 2001-2007 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
* Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
\***************************************************************************/
if (!defined("_ECRIRE_INC_VERSION")) return;
// Les parametres generaux du site sont dans une table SQL;
// Recopie dans le tableau PHP global meta, car on en a souvent besoin
// http://doc.spip.org/@inc_meta_dist
function inc_meta_dist()
{
// Lire les meta, en cache si present, valide et lisible
if ($new = jeune_fichier(_FILE_META, 1<<24)
# AND (@filemtime(_FILE_META) > @filemtime(_DIR_RESTREINT . '.svn/entries'))
AND lire_fichier(_FILE_META, $meta))
$GLOBALS['meta'] = @unserialize($meta);
// sinon lire en base
if (!$GLOBALS['meta']) $new = !lire_metas();
// renouveller l'alea au besoin
if (test_espace_prive()
AND $GLOBALS['meta']
AND (time() >/* _RENOUVELLE_ALEA + */ @$GLOBALS['meta']['alea_ephemere_date'])) {
// si on n'a pas l'acces en ecriture sur le cache,
// ne pas renouveller l'alea sinon le cache devient faux
if (supprimer_fichier(_FILE_META)) {
include_spip('inc/acces');
renouvelle_alea();
$new = false;
} else spip_log("impossible d'ecrire dans " . _FILE_META);
}
// et refaire le cache si on a du lire en base
if (!$new) 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 ($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'];
if (!$GLOBALS['meta']['charset'])
ecrire_meta('charset', _DEFAULT_CHARSET);
}
return $GLOBALS['meta'];
}
// http://doc.spip.org/@effacer_meta
function effacer_meta($nom) {
// section critique sur le cache:
// l'invalider avant et apres la MAJ de la BD
// c'est un peu moints bien qu'un vrai verrou mais ca suffira
@touch(_FILE_META,0);
sql_delete("spip_meta", "nom='$nom'");
@touch(_FILE_META,0);
}
// http://doc.spip.org/@ecrire_meta
function ecrire_meta($nom, $valeur, $importable = NULL) {
if (!$nom) return;
$GLOBALS['meta'][$nom] = $valeur;
$res = spip_query("SELECT impt,valeur FROM spip_meta WHERE nom=" . _q($nom));
if (!$res) return;
include_spip('base/abstract_sql');
$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;
// cf effacer pour le double touch
@touch(_FILE_META, 0);
if ($res) {
$r = ($importable === NULL) ? ''
: (", impt=" . _q($importable));
spip_query("UPDATE spip_meta SET valeur=" . _q($valeur) ."$r WHERE nom=" . _q($nom) );
} else {
$r = array('nom' => $nom, 'valeur' => $valeur);
if ($importable) $r['impt'] = $importable;
sql_insertq('spip_meta', $r);
@touch(_FILE_META, 0);
}
}
?>