Newer
Older
if (!preg_match(',^\w+:,', $h)) {
include_spip('inc/filtres_mini');
cerdic
a validé
return $h;
* @deprecated 4.1
function generer_url_entite_absolue($id = 0, $entite = '', $args = '', $ancre = '', $connect = null) {
return generer_objet_url_absolue(intval($id), $entite, $args, $ancre, true, '', $connect ?? '');
/**
* Tester qu'une variable d'environnement est active
cerdic
a validé
*
* Sur certains serveurs, la valeur 'Off' tient lieu de false dans certaines
marcimat
a validé
* variables d'environnement comme `$_SERVER['HTTPS']` ou `ini_get('display_errors')`
*
* @param string|bool $truc
* La valeur de la variable d'environnement
* @return bool
* true si la valeur est considérée active ; false sinon.
cerdic
a validé
**/
function test_valeur_serveur($truc) {
cerdic
a validé
if (!$truc) {
return false;
}
return (strtolower($truc) !== 'off');
//
// Fonctions de fabrication des URL des scripts de Spip
//
/**
RastaPopoulos
a validé
* Calcule l'URL de base du site, en priorité sans se fier à la méta (adresse_site) qui
* peut être fausse (sites avec plusieurs noms d’hôtes, déplacements, erreurs).
* En dernier recours, lorsqu'on ne trouve rien, on utilise adresse_site comme fallback.
cerdic
a validé
*
* @note
* La globale `$profondeur_url` doit être initialisée de manière à
* indiquer le nombre de sous-répertoires de l'url courante par rapport à la
* racine de SPIP : par exemple, sur ecrire/ elle vaut 1, sur sedna/ 1, et à
* la racine 0. Sur url/perso/ elle vaut 2
*
* @param int|boo|array $profondeur
* - si non renseignée : retourne l'url pour la profondeur $GLOBALS['profondeur_url']
* - si int : indique que l'on veut l'url pour la profondeur indiquée
* - si bool : retourne le tableau static complet
* - si array : réinitialise le tableau static complet avec la valeur fournie
* @return string|array
*/
gilles.vincent
a validé
function url_de_base($profondeur = null) {
cerdic
a validé
if (is_array($profondeur)) {
return $url = $profondeur;
}
if ($profondeur === false) {
return $url;
}
cerdic
a validé
if (is_null($profondeur)) {
$profondeur = $GLOBALS['profondeur_url'] ?? (_DIR_RESTREINT ? 0 : 1);
cerdic
a validé
}
cerdic
a validé
if (isset($url[$profondeur])) {
return $url[$profondeur];
cerdic
a validé
}
$http = 'http';
if (
isset($_SERVER['SCRIPT_URI'])
and substr($_SERVER['SCRIPT_URI'], 0, 5) == 'https'
) {
$http = 'https';
} elseif (
isset($_SERVER['HTTPS'])
and test_valeur_serveur($_SERVER['HTTPS'])
) {
$http = 'https';
}
// note : HTTP_HOST contient le :port si necessaire
if ($host = $_SERVER['HTTP_HOST'] ?? null) {
// Filtrer $host pour proteger d'attaques d'entete HTTP
$host = (filter_var($host, FILTER_SANITIZE_URL) ?: null);
}
// si on n'a pas trouvé d'hôte du tout, en dernier recours on utilise adresse_site comme fallback
if (is_null($host) and isset($GLOBALS['meta']['adresse_site'])) {
$host = $GLOBALS['meta']['adresse_site'];
if ($scheme = parse_url($host, PHP_URL_SCHEME)) {
$http = $scheme;
$host = str_replace("{$scheme}://", '', $host);
RastaPopoulos
a validé
}
}
and $port = $_SERVER['SERVER_PORT']
) {
if (!defined('_PORT_HTTP_STANDARD')) {
define('_PORT_HTTP_STANDARD', '80');
}
if (!defined('_PORT_HTTPS_STANDARD')) {
define('_PORT_HTTPS_STANDARD', '443');
}
if ($http == 'http' and !in_array($port, explode(',', _PORT_HTTP_STANDARD))) {
$host .= ":$port";
}
if ($http == 'https' and !in_array($port, explode(',', _PORT_HTTPS_STANDARD))) {
$host .= ":$port";
}
cerdic
a validé
if (!$GLOBALS['REQUEST_URI']) {
if (isset($_SERVER['REQUEST_URI'])) {
$GLOBALS['REQUEST_URI'] = $_SERVER['REQUEST_URI'];
} else {
$GLOBALS['REQUEST_URI'] = (php_sapi_name() !== 'cli') ? $_SERVER['PHP_SELF'] : '';
marcimat
a validé
and !strpos($_SERVER['REQUEST_URI'], '?')
cerdic
a validé
) {
$GLOBALS['REQUEST_URI'] .= '?' . $_SERVER['QUERY_STRING'];
}
// Et nettoyer l'url
$GLOBALS['REQUEST_URI'] = (filter_var($GLOBALS['REQUEST_URI'], FILTER_SANITIZE_URL) ?: '');
cerdic
a validé
$url[$profondeur] = url_de_($http, $host, $GLOBALS['REQUEST_URI'], $profondeur);
return $url[$profondeur];
cerdic
a validé
/**
* fonction testable de construction d'une url appelee par url_de_base()
cerdic
a validé
*
* @param string $http
* @param string $host
* @param string $request
* @param int $prof
* @return string
*/
cerdic
a validé
function url_de_($http, $host, $request, $prof = 0) {
$prof = max($prof, 0);
cerdic
a validé
$myself = ltrim($request, '/');
# supprimer la chaine de GET
// vieux mode HTTP qui envoie après le nom de la methode l'URL compléte
// protocole, "://", nom du serveur avant le path dans _SERVER["REQUEST_URI"]
if (strpos($myself, '://') !== false) {
$myself = explode('://', $myself);
array_shift($myself);
$myself = implode('://', $myself);
$myself = explode('/', $myself);
array_shift($myself);
$url = join('/', array_slice(explode('/', $myself), 0, -1 - $prof)) . '/';
cerdic
a validé
$url = $http . '://' . rtrim($host, '/') . '/' . ltrim($url, '/');
return $url;
}
// Pour une redirection, la liste des arguments doit etre separee par "&"
// Pour du code XHTML, ca doit etre &
// Bravo au W3C qui n'a pas ete capable de nous eviter ca
// faute de separer proprement langage et meta-langage
// Attention, X?y=z et "X/?y=z" sont completement differents!
// http://httpd.apache.org/docs/2.0/mod/mod_dir.html
esj
a validé
/**
* Crée une URL vers un script de l'espace privé
*
* @example
* ```
* generer_url_ecrire('admin_plugin')
* ```
*
* @param string $script
* Nom de la page privée (xx dans exec=xx)
* @param string $args
* Arguments à transmettre, tel que `arg1=yy&arg2=zz`
* @param bool $no_entities
* Si false : transforme les `&` en `&`
* @param bool|string $rel
* URL relative ?
*
* - false : l’URL sera complète et contiendra l’URL du site
* - true : l’URL sera relavive.
* - string : on transmet l'url à la fonction
* @return string URL
cerdic
a validé
**/
marcimat
a validé
function generer_url_ecrire(?string $script = '', $args = '', $no_entities = false, $rel = false) {
$script ??= '';
cerdic
a validé
if (!$rel) {
$rel = url_de_base() . _DIR_RESTREINT_ABS . _SPIP_ECRIRE_SCRIPT;
cerdic
a validé
} else {
if (!is_string($rel)) {
$rel = _DIR_RESTREINT ?: './' . _SPIP_ECRIRE_SCRIPT;
cerdic
a validé
}
}
[$script, $ancre] = array_pad(explode('#', $script), 2, null);
marcimat
a validé
if ($script and ($script <> 'accueil' or $rel)) {
$args = "?exec=$script" . (!$args ? '' : "&$args");
cerdic
a validé
} elseif ($args) {
$args = "?$args";
}
if ($ancre) {
$args .= "#$ancre";
}
return $rel . ($no_entities ? $args : str_replace('&', '&', $args));
}
//
// Adresse des scripts publics (a passer dans inc-urls...)
//
/**
* Retourne le nom du fichier d'exécution de SPIP
*
* @see _SPIP_SCRIPT
* @note
* Detecter le fichier de base, a la racine, comme etant spip.php ou ''
* dans le cas de '', un $default = './' peut servir (comme dans urls/page.php)
*
* @param string $default
* Script par défaut
* @return string
* Nom du fichier (constante _SPIP_SCRIPT), sinon nom par défaut
cerdic
a validé
**/
gilles.vincent
a validé
function get_spip_script($default = '') {
if (!defined('_SPIP_SCRIPT')) {
return 'spip.php';
}
# cas define('_SPIP_SCRIPT', '');
cerdic
a validé
if (_SPIP_SCRIPT) {
cerdic
a validé
} else {
cerdic
a validé
}
/**
* Crée une URL vers une page publique de SPIP
*
* @example
* ```
* generer_url_public("rubrique","id_rubrique=$id_rubrique")
* ```
*
* @param string $script
* Nom de la page
* @param string|array $args
* Arguments à transmettre a l'URL,
* soit sous la forme d'un string tel que `arg1=yy&arg2=zz`
* soit sous la forme d'un array tel que array( `arg1` => `yy`, `arg2` => `zz` )
* @param bool $no_entities
* Si false : transforme les `&` en `&`
* @param bool $rel
* URL relative ?
*
* - false : l’URL sera complète et contiendra l’URL du site
* - true : l’URL sera relavive.
* @param string $action
* - Fichier d'exécution public (spip.php par défaut)
* @return string URL
cerdic
a validé
**/
function generer_url_public($script = '', $args = '', $no_entities = false, $rel = true, $action = '') {
// si le script est une action (spip_pass, spip_inscription),
if (is_array($args)) {
$args = http_build_query($args);
cerdic
a validé
}
Fil
a validé
$url = '';
if ($f = charger_fonction_url('page')) {
$url = $f($script, $args);
if ($url and !$rel) {
include_spip('inc/filtres_mini');
$url = url_absolue($url);
}
}
if (!$url) {
if (!$action) {
$action = get_spip_script();
}
if ($script) {
$action = parametre_url($action, _SPIP_PAGE, $script, '&');
if ($args) {
$action .= (strpos($action, '?') !== false ? '&' : '?') . $args;
}
// ne pas generer une url avec /./?page= en cas d'url absolue et de _SPIP_SCRIPT vide
$url = ($rel ? _DIR_RACINE . $action : rtrim(url_de_base(), '/') . preg_replace(',^/[.]/,', '/', "/$action"));
cerdic
a validé
if (!$no_entities) {
$url = quote_amp($url);
cerdic
a validé
}
return $url;
function generer_url_prive($script, $args = '', $no_entities = false) {
cerdic
a validé
return generer_url_public($script, $args, $no_entities, false, _DIR_RESTREINT_ABS . 'prive.php');
// Pour les formulaires en methode POST,
// mettre le nom du script a la fois en input-hidden et dans le champ action:
// 1) on peut ainsi memoriser le signet comme si c'etait un GET
// 2) ca suit http://en.wikipedia.org/wiki/Representational_State_Transfer
/**
* Retourne un formulaire (POST par défaut) vers un script exec
* de l’interface privée
*
* @param string $script
* Nom de la page exec
* @param string $corps
* Contenu du formulaire
* @param string $atts
* Si présent, remplace les arguments par défaut (method=post) par ceux indiqués
* @param string $submit
* Si indiqué, un bouton de soumission est créé avec texte sa valeur.
* @return string
* Code HTML du formulaire
cerdic
a validé
**/
gilles.vincent
a validé
function generer_form_ecrire($script, $corps, $atts = '', $submit = '') {
$script1 = explode('&', $script);
$script1 = reset($script1);
return "<form action='"
. ($script ? generer_url_ecrire($script) : '')
. "' "
cerdic
a validé
. "><div>\n"
. "<input type='hidden' name='exec' value='$script1' />"
. $corps
. (!$submit ? '' :
("<div style='text-align: " . $GLOBALS['spip_lang_right'] . "'><input class='fondo submit btn' type='submit' value=\"" . entites_html($submit) . '" /></div>'))
. "</div></form>\n";
}
cerdic
a validé
/**
* Générer un formulaire pour lancer une action vers $script
cerdic
a validé
*
* Attention, JS/Ajax n'aime pas le melange de param GET/POST
* On n'applique pas la recommandation ci-dessus pour les scripts publics
* qui ne sont pas destines a etre mis en signets
*
* @param string $script
* @param string $corps
* @param string $atts
* @param bool $public
* @return string
*/
gilles.vincent
a validé
function generer_form_action($script, $corps, $atts = '', $public = false) {
// si l'on est dans l'espace prive, on garde dans l'url
// l'exec a l'origine de l'action, qui permet de savoir si il est necessaire
// ou non de proceder a l'authentification (cas typique de l'install par exemple)
marcimat
a validé
$h = (_DIR_RACINE and !$public)
cerdic
a validé
? generer_url_ecrire(_request('exec'))
: generer_url_public();
return "\n<form action='" .
cerdic
a validé
$h .
"'" .
$atts .
">\n" .
cerdic
a validé
"\n<input type='hidden' name='action' value='$script' />" .
$corps .
* @param string $script
* @param string $args
* Arguments à transmettre a l'URL sous la forme `arg1=yy&arg2=zz`
* @param bool $no_entities
* @param boolean $public
* URL relative ? false : l’URL sera complète et contiendra l’URL du site.
* true : l’URL sera relative.
* @return string
* URL
*/
function generer_url_action($script, $args = '', $no_entities = false, $public = false) {
// si l'on est dans l'espace prive, on garde dans l'url
// l'exec a l'origine de l'action, qui permet de savoir si il est necessaire
// ou non de proceder a l'authentification (cas typique de l'install par exemple)
marcimat
a validé
$url = (_DIR_RACINE and !$public)
cerdic
a validé
? generer_url_ecrire(_request('exec'))
: generer_url_public('', '', false, false);
$url = parametre_url($url, 'action', $script);
if ($args) {
$url .= quote_amp('&' . $args);
}
if ($no_entities) {
$url = str_replace('&', '&', $url);
}
return $url;
}
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
/**
* Créer une URL
*
* @param string $script
* Nom du script à exécuter
* @param string $args
* Arguments à transmettre a l'URL sous la forme `arg1=yy&arg2=zz`
* @param bool $no_entities
* Si false : transforme les & en &
* @param boolean $public
* URL public ou relative a l'espace ou l'on est ?
* @return string
* URL
*/
function generer_url_api(string $script, string $path, string $args, bool $no_entities = false, ?bool $public = null) {
if (is_null($public)) {
$public = (_DIR_RACINE ? false : '');
}
if (substr($script, -4) !== '.api') {
$script .= '.api';
}
$url =
(($public ? _DIR_RACINE : _DIR_RESTREINT) ?: './')
. $script . '/'
. ($path ? trim($path, '/') : '')
if ($no_entities) {
$url = str_replace('&', '&', $url);
}
return $url;
}
* Fonction d'initialisation groupée pour compatibilité ascendante
* @param string $pi Répertoire permanent inaccessible
* @param string $pa Répertoire permanent accessible
* @param string $ti Répertoire temporaire inaccessible
* @param string $ta Répertoire temporaire accessible
cerdic
a validé
function spip_initialisation($pi = null, $pa = null, $ti = null, $ta = null) {
spip_initialisation_core($pi, $pa, $ti, $ta);
* Fonction d'initialisation, appellée dans inc_version ou mes_options
*
* Elle définit les répertoires et fichiers non partageables
* et indique dans $test_dirs ceux devant être accessibles en écriture
* mais ne touche pas à cette variable si elle est déjà définie
* afin que mes_options.php puisse en spécifier d'autres.
*
* Elle définit ensuite les noms des fichiers et les droits.
* Puis simule un register_global=on sécurisé.
* @param string $pi Répertoire permanent inaccessible
* @param string $pa Répertoire permanent accessible
* @param string $ti Répertoire temporaire inaccessible
* @param string $ta Répertoire temporaire accessible
cerdic
a validé
function spip_initialisation_core($pi = null, $pa = null, $ti = null, $ta = null) {
static $too_late = 0;
cerdic
a validé
if ($too_late++) {
return;
}
// Declaration des repertoires
// le nom du repertoire plugins/ activables/desactivables
cerdic
a validé
if (!defined('_DIR_PLUGINS')) {
cerdic
a validé
}
// le nom du repertoire des extensions/ permanentes du core, toujours actives
cerdic
a validé
if (!defined('_DIR_PLUGINS_DIST')) {
define('_DIR_PLUGINS_DIST', _DIR_RACINE . 'plugins-dist/');
cerdic
a validé
}
// le nom du repertoire des librairies
cerdic
a validé
if (!defined('_DIR_LIB')) {
cerdic
a validé
}
// répertoire des libs via Composer
if (!defined('_DIR_VENDOR')) {
define('_DIR_VENDOR', _DIR_RACINE . 'vendor/');
}
cerdic
a validé
if (!defined('_DIR_IMG')) {
define('_DIR_IMG', $pa);
}
if (!defined('_DIR_LOGOS')) {
define('_DIR_LOGOS', $pa);
}
if (!defined('_DIR_IMG_ICONES')) {
cerdic
a validé
}
cerdic
a validé
if (!defined('_DIR_DUMP')) {
cerdic
a validé
}
if (!defined('_DIR_SESSIONS')) {
cerdic
a validé
}
if (!defined('_DIR_TRANSFERT')) {
cerdic
a validé
}
if (!defined('_DIR_CACHE')) {
cerdic
a validé
}
if (!defined('_DIR_CACHE_XML')) {
cerdic
a validé
}
if (!defined('_DIR_SKELS')) {
cerdic
a validé
}
if (!defined('_DIR_AIDE')) {
cerdic
a validé
}
if (!defined('_DIR_TMP')) {
define('_DIR_TMP', $ti);
}
cerdic
a validé
if (!defined('_DIR_VAR')) {
define('_DIR_VAR', $ta);
}
cerdic
a validé
if (!defined('_DIR_ETC')) {
define('_DIR_ETC', $pi);
}
if (!defined('_DIR_CONNECT')) {
define('_DIR_CONNECT', $pi);
}
if (!defined('_DIR_CHMOD')) {
define('_DIR_CHMOD', $pi);
}
cerdic
a validé
// 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
cerdic
a validé
}
// Declaration des fichiers
cerdic
a validé
if (!defined('_CACHE_PLUGINS_PATH')) {
define('_CACHE_PLUGINS_PATH', _DIR_CACHE . 'charger_plugins_chemins.php');
cerdic
a validé
}
if (!defined('_CACHE_PLUGINS_OPT')) {
define('_CACHE_PLUGINS_OPT', _DIR_CACHE . 'charger_plugins_options.php');
cerdic
a validé
}
if (!defined('_CACHE_PLUGINS_FCT')) {
define('_CACHE_PLUGINS_FCT', _DIR_CACHE . 'charger_plugins_fonctions.php');
cerdic
a validé
}
if (!defined('_CACHE_PIPELINES')) {
define('_CACHE_PIPELINES', _DIR_CACHE . 'charger_pipelines.php');
cerdic
a validé
}
if (!defined('_CACHE_CHEMIN')) {
cerdic
a validé
}
# attention .php obligatoire pour ecrire_fichier_securise
cerdic
a validé
if (!defined('_FILE_META')) {
define('_FILE_META', $ti . 'meta_cache.php');
}
if (!defined('_DIR_LOG')) {
define('_DIR_LOG', _DIR_TMP . 'log/');
}
if (!defined('_FILE_LOG')) {
define('_FILE_LOG', 'spip');
}
if (!defined('_FILE_LOG_SUFFIX')) {
define('_FILE_LOG_SUFFIX', '.log');
}
// Le fichier de connexion a la base de donnees
// tient compte des anciennes versions (inc_connect...)
cerdic
a validé
if (!defined('_FILE_CONNECT_INS')) {
define('_FILE_CONNECT_INS', 'connect');
}
if (!defined('_FILE_CONNECT')) {
define(
'_FILE_CONNECT',
(@is_readable($f = _DIR_CONNECT . _FILE_CONNECT_INS . '.php') ? $f
cerdic
a validé
: (@is_readable($f = _DIR_RESTREINT . 'inc_connect.php') ? $f
cerdic
a validé
}
// Le fichier de reglages des droits
cerdic
a validé
if (!defined('_FILE_CHMOD_INS')) {
define('_FILE_CHMOD_INS', 'chmod');
}
if (!defined('_FILE_CHMOD')) {
define(
'_FILE_CHMOD',
(@is_readable($f = _DIR_CHMOD . _FILE_CHMOD_INS . '.php') ? $f
: false)
);
cerdic
a validé
}
cerdic
a validé
if (!defined('_FILE_LDAP')) {
define('_FILE_LDAP', 'ldap.php');
}
cerdic
a validé
if (!defined('_FILE_TMP_SUFFIX')) {
define('_FILE_TMP_SUFFIX', '.tmp.php');
}
if (!defined('_FILE_CONNECT_TMP')) {
define('_FILE_CONNECT_TMP', _DIR_CONNECT . _FILE_CONNECT_INS . _FILE_TMP_SUFFIX);
}
if (!defined('_FILE_CHMOD_TMP')) {
define('_FILE_CHMOD_TMP', _DIR_CHMOD . _FILE_CHMOD_INS . _FILE_TMP_SUFFIX);
}
// Definition des droits d'acces en ecriture
marcimat
a validé
if (!defined('_SPIP_CHMOD') and _FILE_CHMOD) {
include_once _FILE_CHMOD;
cerdic
a validé
}
// Se mefier des fichiers mal remplis!
cerdic
a validé
if (!defined('_SPIP_CHMOD')) {
define('_SPIP_CHMOD', 0777);
}
if (!defined('_DEFAULT_CHARSET')) {
/** Le charset par défaut lors de l'installation */
define('_DEFAULT_CHARSET', 'utf-8');
}
cerdic
a validé
if (!defined('_ROOT_PLUGINS')) {
cerdic
a validé
}
if (!defined('_ROOT_PLUGINS_DIST')) {
define('_ROOT_PLUGINS_DIST', _ROOT_RACINE . 'plugins-dist/');
cerdic
a validé
}
if (!defined('_ROOT_PLUGINS_SUPPL') && defined('_DIR_PLUGINS_SUPPL') && _DIR_PLUGINS_SUPPL) {
define('_ROOT_PLUGINS_SUPPL', _ROOT_RACINE . str_replace(_DIR_RACINE, '', _DIR_PLUGINS_SUPPL));
}
// La taille des Log
cerdic
a validé
if (!defined('_MAX_LOG')) {
define('_MAX_LOG', 100);
}
// Sommes-nous dans l'empire du Mal ?
// (ou sous le signe du Pingouin, ascendant GNU ?)
marcimat
a validé
if (isset($_SERVER['SERVER_SOFTWARE']) and str_contains($_SERVER['SERVER_SOFTWARE'], '(Win')) {
cerdic
a validé
if (!defined('_OS_SERVEUR')) {
define('_OS_SERVEUR', 'windows');
}
if (!defined('_SPIP_LOCK_MODE')) {
define('_SPIP_LOCK_MODE', 1);
} // utiliser le flock php
} else {
if (!defined('_OS_SERVEUR')) {
define('_OS_SERVEUR', '');
}
if (!defined('_SPIP_LOCK_MODE')) {
define('_SPIP_LOCK_MODE', 1);
} // utiliser le flock php
#if (!defined('_SPIP_LOCK_MODE')) define('_SPIP_LOCK_MODE',2); // utiliser le nfslock de spip mais link() est tres souvent interdite
gilles.vincent
a validé
// Langue par defaut
cerdic
a validé
if (!defined('_LANGUE_PAR_DEFAUT')) {
define('_LANGUE_PAR_DEFAUT', 'fr');
}
gilles.vincent
a validé
//
// 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 _ROOT_RESTREINT . 'inc/flock.php';
// charger tout de suite le path et son cache
// *********** traiter les variables ************
//
// Securite
//
// Ne pas se faire manger par un bug php qui accepte ?GLOBALS[truc]=toto
cerdic
a validé
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);
// appliquer le cookie_prefix
if ($GLOBALS['cookie_prefix'] != 'spip') {
include_spip('inc/cookie');
recuperer_cookies_spip($GLOBALS['cookie_prefix']);
}
// Compatibilite avec serveurs ne fournissant pas $REQUEST_URI
if (isset($_SERVER['REQUEST_URI'])) {
$GLOBALS['REQUEST_URI'] = $_SERVER['REQUEST_URI'];
} else {
$GLOBALS['REQUEST_URI'] = (php_sapi_name() !== 'cli') ? $_SERVER['PHP_SELF'] : '';
marcimat
a validé
and !strpos($_SERVER['REQUEST_URI'], '?')
cerdic
a validé
) {
$GLOBALS['REQUEST_URI'] .= '?' . $_SERVER['QUERY_STRING'];
}
}
// Duree de validite de l'alea pour les cookies et ce qui s'ensuit.
cerdic
a validé
if (!defined('_RENOUVELLE_ALEA')) {
define('_RENOUVELLE_ALEA', 12 * 3600);
cerdic
a validé
}
if (!defined('_DUREE_COOKIE_ADMIN')) {
define('_DUREE_COOKIE_ADMIN', 14 * 24 * 3600);
// charger les meta si possible et renouveller l'alea au besoin
// charge aussi effacer_meta et ecrire_meta
$inc_meta = charger_fonction('meta', 'inc');
$inc_meta();
// nombre de repertoires depuis la racine
// on compare a l'adresse de spip.php : $_SERVER["SCRIPT_NAME"]
// ou a defaut celle donnee en meta ; (mais si celle-ci est fausse
// le calcul est faux)
cerdic
a validé
if (!_DIR_RESTREINT) {
cerdic
a validé
} else {
$uri = isset($_SERVER['REQUEST_URI']) ? explode('?', $_SERVER['REQUEST_URI']) : '';
$uri_ref = $_SERVER['SCRIPT_NAME'];
if (
!$uri_ref
cerdic
a validé
// si on est appele avec un autre ti, on est sans doute en mutu
// si jamais c'est de la mutu avec sous rep, on est perdu si on se fie
// a spip.php qui est a la racine du spip, et vue qu'on sait pas se reperer
// s'en remettre a l'adresse du site. alea jacta est.
marcimat
a validé
or $ti !== _NOM_TEMPORAIRES_INACCESSIBLES
cerdic
a validé
) {
if (isset($GLOBALS['meta']['adresse_site'])) {
$uri_ref = parse_url($GLOBALS['meta']['adresse_site']);
$uri_ref = ($uri_ref['path'] ?? '') . '/';
cerdic
a validé
} else {
cerdic
a validé
}
marcimat
a validé
if (!$uri or !$uri_ref) {
cerdic
a validé
} else {
}
}
// s'il y a un cookie ou PHP_AUTH, initialiser visiteur_session
// si c'est un admin sans cookie admin, il faut ignorer le cache chemin !
marcimat
a validé
and !isset($_COOKIE['spip_admin'])
cerdic
a validé
) {
cerdic
a validé
}
}
/**
* Complements d'initialisation non critiques pouvant etre realises
* par les plugins
*
*/
cerdic
a validé
function spip_initialisation_suite() {
cerdic
a validé
if ($too_late++) {
return;
}
cerdic
a validé
if (!defined('_LOGIN_TROP_COURT')) {
define('_LOGIN_TROP_COURT', 4);
}
// la taille maxi des logos (0 : pas de limite) (pas de define par defaut, ce n'est pas utile)
#if (!defined('_LOGO_MAX_SIZE')) define('_LOGO_MAX_SIZE', 0); # poids en ko
#if (!defined('_LOGO_MAX_WIDTH')) define('_LOGO_MAX_WIDTH', 0); # largeur en pixels
#if (!defined('_LOGO_MAX_HEIGHT')) define('_LOGO_MAX_HEIGHT', 0); # hauteur en pixels
// la taille maxi des images (0 : pas de limite) (pas de define par defaut, ce n'est pas utile)
#if (!defined('_DOC_MAX_SIZE')) define('_DOC_MAX_SIZE', 0); # poids en ko
#if (!defined('_IMG_MAX_SIZE')) define('_IMG_MAX_SIZE', 0); # poids en ko
#if (!defined('_IMG_MAX_WIDTH')) define('_IMG_MAX_WIDTH', 0); # largeur en pixels
#if (!defined('_IMG_MAX_HEIGHT')) define('_IMG_MAX_HEIGHT', 0); # hauteur en pixels
cerdic
a validé
cerdic
a validé
if (!defined('_PASS_LONGUEUR_MINI')) {
define('_PASS_LONGUEUR_MINI', 6);
}
// largeur maximale des images dans l'administration
if (!defined('_IMG_ADMIN_MAX_WIDTH')) {
define('_IMG_ADMIN_MAX_WIDTH', 768);
}
// Qualite des images calculees automatiquement. C'est un nombre entre 0 et 100, meme pour imagick (on ramene a 0..1 par la suite)
cerdic
a validé
if (!defined('_IMG_QUALITE')) {
define('_IMG_QUALITE', 85);
} # valeur par defaut
if (!defined('_IMG_GD_QUALITE')) {
define('_IMG_GD_QUALITE', _IMG_QUALITE);
} # surcharge pour la lib GD
if (!defined('_IMG_CONVERT_QUALITE')) {
define('_IMG_CONVERT_QUALITE', _IMG_QUALITE);
} # surcharge pour imagick en ligne de commande
// Historiquement la valeur pour imagick semble differente. Si ca n'est pas necessaire, il serait preferable de garder _IMG_QUALITE
cerdic
a validé
if (!defined('_IMG_IMAGICK_QUALITE')) {
define('_IMG_IMAGICK_QUALITE', 75);
} # surcharge pour imagick en PHP
cerdic
a validé
if (!defined('_COPIE_LOCALE_MAX_SIZE')) {
define('_COPIE_LOCALE_MAX_SIZE', 33_554_432);
cerdic
a validé
} // poids en octet
// qq chaines standard
cerdic
a validé
if (!defined('_ACCESS_FILE_NAME')) {
define('_ACCESS_FILE_NAME', '.htaccess');
}
if (!defined('_AUTH_USER_FILE')) {
define('_AUTH_USER_FILE', '.htpasswd');
}
if (!defined('_SPIP_DUMP')) {
define('_SPIP_DUMP', 'dump@nom_site@@stamp@.xml');
}
if (!defined('_CACHE_RUBRIQUES')) {
/** Fichier cache pour le navigateur de rubrique du bandeau */
cerdic
a validé
if (!defined('_CACHE_RUBRIQUES_MAX')) {
/** Nombre maxi de rubriques enfants affichées pour chaque rubrique du navigateur de rubrique du bandeau */
define('_CACHE_RUBRIQUES_MAX', 500);
}
if (!defined('_CACHE_CONTEXTES_AJAX_SUR_LONGUEUR')) {
/**
* Basculer les contextes ajax en fichier si la longueur d’url est trop grande
* @var int Nombre de caractères */
define('_CACHE_CONTEXTES_AJAX_SUR_LONGUEUR', 2000);
}
cerdic
a validé
if (!defined('_EXTENSION_SQUELETTES')) {
define('_EXTENSION_SQUELETTES', 'html');
}
cerdic
a validé
if (!defined('_DOCTYPE_ECRIRE')) {
/** Définit le doctype de l’espace privé */
define('_DOCTYPE_ECRIRE', "<!DOCTYPE html>\n");
cerdic
a validé
}
if (!defined('_DOCTYPE_AIDE')) {
/** Définit le doctype de l’aide en ligne */
define(
'_DOCTYPE_AIDE',
"<!DOCTYPE html PUBLIC '-//W3C//DTD HTML 4.01 Frameset//EN' 'http://www.w3.org/TR/1999/REC-html401-19991224/frameset.dtd'>"
);
cerdic
a validé
}
cerdic
a validé
if (!defined('_SPIP_SCRIPT')) {
/** L'adresse de base du site ; on peut mettre '' si la racine est gerée par
* le script de l'espace public, alias index.php */
cerdic
a validé
define('_SPIP_SCRIPT', 'spip.php');
}
if (!defined('_SPIP_PAGE')) {
/** Argument page, personalisable en cas de conflit avec un autre script */
cerdic
a validé
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)
marcimat
a validé
if (!defined('_SPIP_ECRIRE_SCRIPT')) {
marcimat
a validé
if (!empty($_SERVER['SERVER_SOFTWARE']) and preg_match(',IIS|thttpd,', $_SERVER['SERVER_SOFTWARE'])) {
define('_SPIP_ECRIRE_SCRIPT', 'index.php');
} else {
define('_SPIP_ECRIRE_SCRIPT', '');
}
marcimat
a validé
}
cerdic
a validé
if (!defined('_SPIP_AJAX')) {
define('_SPIP_AJAX', ((!isset($_COOKIE['spip_accepte_ajax']))
? 1
cerdic
a validé
: (($_COOKIE['spip_accepte_ajax'] != -1) ? 1 : 0)));
}
cerdic
a validé
if (!defined('_AJAX')) {
cerdic
a validé
(isset($_SERVER['HTTP_X_REQUESTED_WITH']) # ajax jQuery
marcimat
a validé
or !empty($_REQUEST['var_ajax_redir']) # redirection 302 apres ajax jQuery
or !empty($_REQUEST['var_ajaxcharset']) # compat ascendante pour plugins
or !empty($_REQUEST['var_ajax']) # forms ajax & inclure ajax de spip
cerdic
a validé
)
marcimat
a validé
and empty($_REQUEST['var_noajax']) # horrible exception, car c'est pas parce que la requete est ajax jquery qu'il faut tuer tous les formulaires ajax qu'elle contient
cerdic
a validé
);
}
# 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
cerdic
a validé
if (!defined('_IMG_GD_MAX_PIXELS')) {
define(
'_IMG_GD_MAX_PIXELS',
(isset($GLOBALS['meta']['max_taille_vignettes']) and $GLOBALS['meta']['max_taille_vignettes'])
cerdic
a validé
? $GLOBALS['meta']['max_taille_vignettes']
cerdic
a validé
}
// Protocoles a normaliser dans les chaines de langues
cerdic
a validé
if (!defined('_PROTOCOLES_STD')) {
define('_PROTOCOLES_STD', 'http|https|ftp|mailto|webcal');
cerdic
a validé
}
cerdic
a validé
init_var_mode();
}
marcimat
a validé
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
/**
* Repérer les variables d'URL spéciales `var_mode` qui conditionnent
* la validité du cache ou certains affichages spéciaux.
*
* Le paramètre d'URL `var_mode` permet de
* modifier la pérennité du cache, recalculer des urls
* ou d'autres petit caches (trouver_table, css et js compactes ...),
* d'afficher un écran de débug ou des traductions non réalisées.
*
* En fonction de ces paramètres dans l'URL appelante, on définit
* da constante `_VAR_MODE` qui servira ensuite à SPIP.
*
* Le paramètre `var_mode` accepte ces valeurs :
*
* - `calcul` : force un calcul du cache de la page (sans forcément recompiler les squelettes)
* - `recalcul` : force un calcul du cache de la page en recompilant au préabable les squelettes
* - `inclure` : modifie l'affichage en ajoutant visuellement le nom de toutes les inclusions qu'elle contient
* - `debug` : modifie l'affichage activant le mode "debug"
* - `preview` : modifie l'affichage en ajoutant aux boucles les éléments prévisualisables
* - `traduction` : modifie l'affichage en affichant des informations sur les chaînes de langues utilisées
* - `urls` : permet de recalculer les URLs des objets appelés dans la page par les balises `#URL_xx`
* - `images` : permet de recalculer les filtres d'images utilisés dans la page
*
* En dehors des modes `calcul` et `recalcul`, une autorisation 'previsualiser' ou 'debug' est testée.
*
* @note
* Il éxiste également le paramètre `var_profile` qui modifie l'affichage pour incruster
* le nombre de requêtes SQL utilisées dans la page, qui peut se compléter avec le paramètre
* ` var_mode` (calcul ou recalcul).
*/
cerdic
a validé
function init_var_mode() {
cerdic
a validé
static $done = false;