Skip to content
Extraits de code Groupes Projets
utils.php 33,7 ko
Newer Older
	}

	//
	// Securite
	//

	// Ne pas se faire manger par un bug php qui accepte ?GLOBALS[truc]=toto
	if (isset($_REQUEST['GLOBALS'])) die();
	// nettoyer les magic quotes \' et les caracteres nuls %00
	spip_desinfecte($_GET);
	spip_desinfecte($_POST);
	spip_desinfecte($_COOKIE);
	// Par ailleurs on ne veut pas de magic_quotes au cours de l'execution
	@set_magic_quotes_runtime(0);

	// Remplir $GLOBALS avec $_GET et $_POST (methode a revoir pour fonctionner
	// completement en respectant register_globals = off)
	spip_register_globals();

	// appliquer le cookie_prefix
	if ($GLOBALS['cookie_prefix'] != 'spip') {
Fil's avatar
Fil a validé
		include_spip('inc/cookie');
		recuperer_cookies_spip($GLOBALS['cookie_prefix']);
	}


	//
	// Capacites php (en fonction de la version)
	//
	$GLOBALS['flag_gz'] = function_exists("gzencode"); #php 4.0.4
	$GLOBALS['flag_ob'] = (function_exists("ob_start")
		&& function_exists("ini_get")
		&& (@ini_get('max_execution_time') > 0)
		&& !strstr(ini_get('disable_functions'), 'ob_'));
	$GLOBALS['flag_sapi_name'] = function_exists("php_sapi_name");
	$GLOBALS['flag_revisions'] = function_exists("gzcompress");
	$GLOBALS['flag_get_cfg_var'] = (@get_cfg_var('error_reporting') != "");
	$GLOBALS['flag_upload'] = (!$GLOBALS['flag_get_cfg_var'] ||
		(get_cfg_var('upload_max_filesize') > 0));

	// Sommes-nous dans l'empire du Mal ?
	// (ou sous le signe du Pingouin, ascendant GNU ?)
	if (strpos($_SERVER['SERVER_SOFTWARE'], '(Win') !== false)
		define ('os_serveur', 'windows');
	else
		define ('os_serveur', '');

	// Compatibilite avec serveurs ne fournissant pas $REQUEST_URI
	if (isset($_SERVER['REQUEST_URI'])) {
		$GLOBALS['REQUEST_URI'] = $_SERVER['REQUEST_URI'];
	} else {
		$GLOBALS['REQUEST_URI'] = $_SERVER['PHP_SELF'];
		if ($_SERVER['QUERY_STRING']
		AND !strpos($_SERVER['REQUEST_URI'], '?'))
			$GLOBALS['REQUEST_URI'] .= '?'.$_SERVER['QUERY_STRING'];

	//
	// Module de lecture/ecriture/suppression de fichiers utilisant flock()
	// (non surchargeable en l'etat ; attention si on utilise include_spip()
	// 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';
	// Lire les meta cachees et initier le noyau (espace public uniquement)
	$GLOBALS['noyau'] = array();
	if (lire_fichier(_FILE_META, $meta)) {
		$GLOBALS['meta'] = @unserialize($meta);
		if (_DIR_RESTREINT
		AND isset($GLOBALS['meta']['noyau'])
		AND is_array($GLOBALS['meta']['noyau'])) {
			$GLOBALS['noyau'] = $GLOBALS['meta']['noyau'];
			unset ($GLOBALS['meta']['noyau']);
		}
	// en cas d'echec refaire le fichier
	if (!is_array($GLOBALS['meta']) AND _FILE_CONNECT) {
Fil's avatar
Fil a validé
		include_spip('inc/meta');
	// supprimer le noyau si on recalcule
	if (isset($_REQUEST['var_mode']))
		$GLOBALS['noyau'] = array();

	// Langue principale du site
	$GLOBALS['langue_site'] = $GLOBALS['meta']['langue_site'];
Fil's avatar
Fil a validé
	if (!$GLOBALS['langue_site']) include_spip('inc/lang');
	$GLOBALS['spip_lang'] = $GLOBALS['langue_site'];

	// Verifier le visiteur
	if (_FILE_CONNECT) verifier_visiteur();
// Annuler les magic quotes \' sur GET POST COOKIE et GLOBALS ;
// supprimer aussi les eventuels caracteres nuls %00, qui peuvent tromper
// la commande is_readable('chemin/vers/fichier/interdit%00truc_normal')
// http://doc.spip.org/@spip_desinfecte
function spip_desinfecte(&$t) {
	static $magic_quotes;
	if (!isset($magic_quotes))
		$magic_quotes = @get_magic_quotes_gpc();

	foreach ($t as $key => $val) {
		if (is_string($t[$key])) {
			if ($magic_quotes)
				$t[$key] = stripslashes($t[$key]);
			$t[$key] = str_replace(chr(0), '-', $t[$key]);
		// traiter aussi les "texte_plus" de articles_edit
		else if ($key == 'texte_plus' AND is_array($t[$key]))
			spip_desinfecte($t[$key]);
//  retourne le statut du visiteur s'il s'annonce
// http://doc.spip.org/@verifier_visiteur
// Rq: pour que cette fonction marche depuis mes_options elle a besoin
// que les constantes principales soient initialisees
	spip_initialisation_parametree(_DIR_CONFIG, _DIR_IMG, _DIR_TMP_IMG, _DIR_TMP) ;
	if (isset($_COOKIE['spip_session']) OR
	(isset($_SERVER['PHP_AUTH_USER'])  AND !$GLOBALS['ignore_auth_http'])) {
		$var_f = charger_fonction('session', 'inc');
		if ($var_f()) return $GLOBALS['auteur_session']['statut'];
		include_spip('inc/actions');
		return verifier_php_auth();
// selectionner une langue
// http://doc.spip.org/@lang_select
function lang_select ($lang='') {
	if (!is_array($GLOBALS['pile_langues'])) $GLOBALS['pile_langues'] = array();
	array_push($GLOBALS['pile_langues'], $GLOBALS['spip_lang']);
	if ($lang != $GLOBALS['spip_lang']) {
		include_spip('inc/lang');
		changer_langue($lang);
	}
}

// revenir a la langue precedente
// http://doc.spip.org/@lang_dselect
function lang_dselect ($rien='') {
	$lang = array_pop($GLOBALS['pile_langues']);
	if ($lang != $GLOBALS['spip_lang']) {
		include_spip('inc/lang');
		changer_langue($lang);
	}
}