Newer
Older
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
// 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('_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');
// 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']);
}
define('_SPIP_AJAX', (!isset($_COOKIE['spip_accepte_ajax']))
? 1
: (($_COOKIE['spip_accepte_ajax'] != -1) ? 1 : 0));
//
// 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_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
Fil
a validé
$inc_meta = charger_fonction('meta', 'inc');
$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
define('_IMG_GD_MAX_PIXELS', isset($GLOBALS['meta']['max_taille_vignettes'])?$GLOBALS['meta']['max_taille_vignettes']:0);
}
// 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('nom', 'email');
while (list(,$var) = each($variables_session)) {
if (_request('session_'.$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('session_'.$var)) !== null)
$GLOBALS['visiteur_session']['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);
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['process_ins'] = 'html';
ob_end_clean();
}
$GLOBALS['_INC_PUBLIC']--;
return $page;
}
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
/*
* 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);
}
}