Newer
Older
}
}
}
// sinon il faut les passer nous-memes, a l'exception des interdites.
// (A changer en une liste des variables admissibles...)
Fil
a validé
else if (_FEED_GLOBALS) {
foreach (array('_SERVER', '_COOKIE', '_POST', '_GET') as $_table) {
foreach ($GLOBALS[$_table] as $var => $val) {
if (!isset($GLOBALS[$var]) # indispensable securite
AND isset($GLOBALS[$_table][$var])
AND ($_table == '_SERVER' OR !in_array($var, $refuse_gpc))
AND ($_table <> '_COOKIE' OR !in_array($var, $refuse_c)))
$GLOBALS[$var] = $val;
}
}
}
Fil
a validé
// Fonction d'initialisation, appellee dans inc_version ou mes_options
// Elle definit les repertoires et fichiers non partageables
// et indique dans $test_dirs ceux devant etre accessibles en ecriture
// mais ne touche pas a cette variable si elle est deja definie
// afin que mes_options.php puisse en specifier d'autres.
// Elle definit ensuite les noms des fichiers et les droits.
// Puis simule un register_global=on securise.
// http://doc.spip.org/@spip_initialisation
function spip_initialisation($pi=NULL, $pa=NULL, $ti=NULL, $ta=NULL) {
static $too_late = 0;
if ($too_late++) return;
define('_DIR_IMG', $pa);
define('_DIR_LOGOS', $pa);
define('_DIR_IMG_ICONES', _DIR_LOGOS . "icones/");
define('_DIR_DUMP', $ti . "dump/");
define('_DIR_SESSIONS', $ti . "sessions/");
define('_DIR_TRANSFERT', $ti . "upload/");
JamesRezo
a validé
define('_DIR_CACHE', $ti . "cache/");
define('_DIR_CACHE_XML', _DIR_CACHE . "xml/");
define('_DIR_SKELS', _DIR_CACHE . "skel/");
define('_DIR_AIDE', _DIR_CACHE . "aide/");
define('_DIR_TMP', $ti);
define('_FILE_META', $ti . 'meta_cache.txt');
define('_DIR_VAR', $ta);
define('_DIR_ETC', $pi);
define('_DIR_CONNECT', $pi);
define('_DIR_CHMOD', $pi);
define('_DIR_LOG', _DIR_TMP);
define('_FILE_LOG', 'spip');
define('_FILE_LOG_SUFFIX', '.log');
if (!isset($GLOBALS['test_dirs']))
// Pas $pi car il est bon de le mettre hors ecriture apres intstall
// il sera rajoute automatiquement si besoin a l'etape 2 de l'install
$GLOBALS['test_dirs'] = array($pa, $ti, $ta);
// Le fichier de connexion a la base de donnees
// tient compte des anciennes versions (inc_connect...)
define('_FILE_CONNECT_INS', 'connect');
define('_FILE_CONNECT',
(@is_readable($f = _DIR_CONNECT . _FILE_CONNECT_INS . '.php') ? $f
: (@is_readable($f = _DIR_RESTREINT . 'inc_connect.php') ? $f
: (@is_readable($f = _DIR_RESTREINT . 'inc_connect.php3') ? $f
: false))));
// Le fichier de reglages des droits
define('_FILE_CHMOD_INS', 'chmod');
define('_FILE_CHMOD',
(@is_readable($f = _DIR_CHMOD . _FILE_CHMOD_INS . '.php') ? $f
define('_FILE_LDAP', 'ldap.php');
define('_FILE_TMP_SUFFIX', '.tmp.php');
define('_FILE_CONNECT_TMP', _DIR_CONNECT . _FILE_CONNECT_INS . _FILE_TMP_SUFFIX);
define('_FILE_CHMOD_TMP', _DIR_CHMOD . _FILE_CHMOD_INS . _FILE_TMP_SUFFIX);
// Definition des droits d'acces en ecriture
if (!defined('_SPIP_CHMOD')) {
if(_FILE_CHMOD)
include_once _FILE_CHMOD;
else
define('_SPIP_CHMOD', 0777);
}
// la taille maxi des logos (0 : pas de limite)
define('_LOGO_MAX_SIZE', 0); # poids en ko
define('_LOGO_MAX_WIDTH', 0); # largeur en pixels
define('_LOGO_MAX_HEIGHT', 0); # hauteur en pixels
cerdic
a validé
define('_DOC_MAX_SIZE', 0); # poids en ko
define('_IMG_MAX_SIZE', 0); # poids en ko
define('_IMG_MAX_WIDTH', 0); # largeur en pixels
define('_IMG_MAX_HEIGHT', 0); # hauteur en pixels
cerdic
a validé
define('_COPIE_LOCALE_MAX_SIZE',2097152); // poids en octet
// Le charset par defaut lors de l'installation
define('_DEFAULT_CHARSET', 'utf-8');
// qq chaines standard
define('_ACCESS_FILE_NAME', '.htaccess');
define('_AUTH_USER_FILE', '.htpasswd');
define('_SPIP_DUMP', 'dump@nom_site@@stamp@.xml');
Fil
a validé
define('_CACHE_RUBRIQUES', _DIR_TMP.'menu-rubriques-cache.txt');
define('_CACHE_RUBRIQUES_MAX', 500);
define('_DOCTYPE_ECRIRE',
// "<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN' 'http://www.w3.org/TR/html4/loose.dtd'>\n");
//"<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>\n");
"<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>\n");
// "<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.1 //EN' 'http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd'>\n");
define('_DOCTYPE_AIDE',
"<!DOCTYPE html PUBLIC '-//W3C//DTD HTML 4.01 Frameset//EN' 'http://www.w3.org/TR/1999/REC-html401-19991224/frameset.dtd'>");
// L'adresse de base du site ; on peut mettre '' si la racine est geree par
// le script de l'espace public, alias index.php
define('_SPIP_SCRIPT', 'spip.php');
cerdic
a validé
// argument page, personalisable en cas de conflit avec un autre script
define('_SPIP_PAGE', 'page');
// le script de l'espace prive
// Mettre a "index.php" si DirectoryIndex ne le fait pas ou pb connexes:
// les anciens IIS n'acceptent pas les POST sur ecrire/ (#419)
// meme pb sur thttpd cf. http://forum.spip.org/fr_184153.html
define('_SPIP_ECRIRE_SCRIPT', // true ? #decommenter ici et commenter la
preg_match(',IIS|thttpd,',$_SERVER['SERVER_SOFTWARE']) ?
'index.php' : '');
// le nom du repertoire plugins/
define('_DIR_PLUGINS', _DIR_RACINE . "plugins/");
// *********** traiter les variables ************
//
// 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);
spip_desinfecte($_REQUEST);
spip_desinfecte($GLOBALS);
// Par ailleurs on ne veut pas de magic_quotes au cours de l'execution
@set_magic_quotes_runtime(0);
spip_register_globals();
// appliquer le cookie_prefix
if ($GLOBALS['cookie_prefix'] != 'spip') {
recuperer_cookies_spip($GLOBALS['cookie_prefix']);
}
// Le navigateur accepte-t-il l'ajax ?
define('_SPIP_AJAX', (!isset($_COOKIE['spip_accepte_ajax']))
? 1
: (($_COOKIE['spip_accepte_ajax'] != -1) ? 1 : 0));
// La requete est-elle en ajax ?
define('_AJAX',
isset($_SERVER['HTTP_X_REQUESTED_WITH']) # ajax jQuery
OR @$_REQUEST['var_ajax_redir'] # redirection 302 apres ajax jQuery
OR @$_REQUEST['var_ajaxcharset'] # compat ascendante pour plugins
);
//
// 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")
Fil
a validé
&& !strstr(@ini_get('disable_functions'), 'ob_'));
$GLOBALS['flag_sapi_name'] = function_exists("php_sapi_name");
$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');
define('_SPIP_LOCK_MODE',1); // utiliser le flock php
}
else {
define ('_OS_SERVEUR', '');
define('_SPIP_LOCK_MODE',1); // utiliser le flock php
#define('_SPIP_LOCK_MODE',2); // utiliser le nfslock de spip mais link() est tres souvent interdite
}
// 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';
// Duree de validite de l'alea pour les cookies et ce qui s'ensuit.
// charger les meta si possible et renouveller l'alea au besoin
// charge aussi effacer_meta et ecrire_meta
$inc_meta = charger_fonction('meta', 'inc');
Fil
a validé
$inc_meta();
Fil
a validé
// nombre de repertoires depuis la racine
// on compare a l'adresse donnee en meta ; si celle-ci est fausse
// le calcul est faux. Meilleure idee ??
if (!_DIR_RESTREINT)
$GLOBALS['profondeur_url'] = 1;
else {
$uri = isset($_SERVER['REQUEST_URI']) ? explode('?', $_SERVER['REQUEST_URI']) : '';
if (!$uri OR !isset($GLOBALS['meta']['adresse_site']))
$GLOBALS['profondeur_url'] = 0;
else {
$GLOBALS['profondeur_url'] = max(0, 1+
substr_count($uri[0], '/')
- substr_count($GLOBALS['meta']['adresse_site'],'/'));
}
}
// s'il y a un cookie ou PHP_AUTH, initialiser visiteur_session
# nombre de pixels maxi pour calcul de la vignette avec gd
# au dela de 5500000 on considere que php n'est pas limite en memoire pour cette operation
# les configurations limitees en memoire ont un seuil plutot vers 1MPixel
define('_IMG_GD_MAX_PIXELS', (isset($GLOBALS['meta']['max_taille_vignettes'])&&$GLOBALS['meta']['max_taille_vignettes']<5500000)?$GLOBALS['meta']['max_taille_vignettes']:0);
define('_IMG_GD_QUALITE', 85);
}
// 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
function verifier_visiteur() {
// Demarrer une session NON AUTHENTIFIEE si on donne son nom
// dans un formulaire sans login (ex: #FORMULAIRE_FORUM)
// Attention on separe bien session_nom et nom, pour eviter
// les melanges entre donnees SQL et variables plus aleatoires
$variables_session = array('session_nom', 'session_email');
foreach($variables_session as $var) {
if (_request($var) !== null) {
$init = true;
break;
}
}
if (isset($init)) {
@spip_initialisation();
$session = charger_fonction('session', 'inc');
$session();
include_spip('inc/texte');
foreach($variables_session as $var)
if (($a = _request($var)) !== null)
$GLOBALS['visiteur_session'][$var] = safehtml($a);
if (!isset($GLOBALS['visiteur_session']['id_auteur']))
$GLOBALS['visiteur_session']['id_auteur'] = 0;
ajouter_session($GLOBALS['visiteur_session']);
return 0;
}
if (isset($_COOKIE['spip_session']) OR
(isset($_SERVER['PHP_AUTH_USER']) AND !$GLOBALS['ignore_auth_http'])) {
// Rq: pour que cette fonction marche depuis mes_options
// il faut forcer l'init si ce n'est fait
@spip_initialisation();
$session = charger_fonction('session', 'inc');
if ($session()) {
return $GLOBALS['visiteur_session']['statut'];
include_spip('inc/actions');
return verifier_php_auth();
}
return false;
}
// selectionne la langue donnee en argument et memorise la courante
// ou restaure l'ancienne si appel sans argument
// On pourrait economiser l'empilement en cas de non changemnt
// Le noyau de Spip sait le faire, mais pour assurer la compatibilite
// cette fonction retourne toujours non False
// http://doc.spip.org/@lang_select
function lang_select ($lang=NULL) {
static $pile_langues = array();
if ($lang === NULL)
$lang = array_pop($pile_langues);
else {
array_push($pile_langues, $GLOBALS['spip_lang']);
if ($lang == $GLOBALS['spip_lang'])
return $lang;
changer_langue($lang);
return $lang;
// Renvoie une chaine qui decrit la session courante pour savoir si on peut
// utiliser un cache enregistre pour cette session.
// Par convention cette chaine ne doit pas contenir de caracteres [^0-9A-Za-z]
// Attention on ne peut *pas* inferer id_auteur a partir de la session, qui
// est une chaine arbitraire
// Cette chaine est courte (8 cars) pour pouvoir etre utilisee dans un nom
// de fichier cache
if ($force OR !isset($session)) {
$s = pipeline('definir_session',
$GLOBALS['visiteur_session']
? serialize($GLOBALS['visiteur_session'])
. '_' . @$_COOKIE['spip_session']
: ''
);
$session = $s ? substr(md5($s), 0, 8) : '';
}
#spip_log('session: '.$session);
return $session;
}
//
// Aide, aussi depuis l'espace prive a present.
// Surchargeable mais pas d'ereur fatale si indisponible.
//
// http://doc.spip.org/@aide
function aide($aide='') {
$aider = charger_fonction('aider', 'inc', true);
return $aider ? $aider($aide) : '';
}
// normalement il faudrait creer exec/info.php, mais pour mettre juste ca:
// http://doc.spip.org/@exec_info_dist
function exec_info_dist() {
global $connect_statut;
if ($connect_statut == '0minirezo')
phpinfo();
else
echo "pas admin";
// La fonction de base de SPIP : un squelette + un contexte => une page
// on recupere le resultat sous la forme d'une $page['texte', 'headers'...]
// options :
// 'protect_xml' => false, conserver le \1 du xml-hack
// http://doc.spip.org/@evaluer_fond
function evaluer_fond ($fond, $contexte=array(), $options=array(), $connect=null) {
include_spip('public/assembler');
// on est peut etre dans l'espace prive au moment de l'appel
if (!isset($GLOBALS['_INC_PUBLIC'])) $GLOBALS['_INC_PUBLIC'] = 0;
$GLOBALS['_INC_PUBLIC']++;
if (isset($contexte['fond'])
AND $fond === '')
$fond = $contexte['fond'];
$page = inclure_page($fond, $contexte, $connect);
// Lever un drapeau (global) si le fond utilise #SESSION
// a destination de public/parametrer
if (isset($page['invalideurs'])
AND isset($page['invalideurs']['session']))
$GLOBALS['cache_utilise_session'] = $page['invalideurs']['session'];
if ($GLOBALS['flag_ob'] AND ($page['process_ins'] != 'html')) {
ob_start();
xml_hack($page, true);
eval('?' . '>' . $page['texte']);
$page['texte'] = ob_get_contents();
xml_hack($page);
page_base_href($page['texte']);
marcimat
a validé
function charger_php_extension($module) {
if (extension_loaded($module)) {
return true;
} else {
$charger_php_extension = charger_fonction('charger_php_extension','inc');
return $charger_php_extension($module);
marcimat
a validé
}
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
/*
* Bloc de compatibilite : quasiment tous les plugins utilisent ces fonctions
* desormais depreciees ; plutot que d'obliger tout le monde a charger
* vieilles_defs, on va assumer l'histoire de ces 3 fonctions ubiquitaires
*/
// Fonction depreciee
// http://doc.spip.org/@lire_meta
function lire_meta($nom) {
return $GLOBALS['meta'][$nom];
}
// Fonction depreciee
// http://doc.spip.org/@ecrire_metas
function ecrire_metas() {}
// Fonction depreciee, cf. http://doc.spip.org/@sql_fetch
// http://doc.spip.org/@spip_fetch_array
function spip_fetch_array($r, $t=NULL) {
if (!isset($t)) {
if ($r) return sql_fetch($r);
} else {
spip_log("appel deprecie de spip_fetch_array(..., $t)", 'vieilles_defs');
if ($r) return mysql_fetch_array($r, $t);
}
}