/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2014 *
+ * Copyright (c) 2001-2016 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
if (!preg_match(',^\w+$,', $f)){
if ($continue) return false; //appel interne, on passe
- die(spip_htmlspecialchars($nom)." pas autorise");
+ include_spip('inc/minipres');
+ echo minipres();
+ exit;
}
// passer en minuscules (cf les balises de formulaires)
include_spip('inc/minipres');
echo minipres(_T('forum_titre_erreur'),
- _T('fichier_introuvable', array('fichier'=> '<b>'.spip_htmlentities($d).'</b>')));
+ _T('fichier_introuvable', array('fichier'=> '<b>'.spip_htmlentities($d).'</b>')),
+ array('all_inline'=>true,'status'=>404));
exit;
}
*/
function include_once_check($file){
if (file_exists($file)) {include_once $file;return true;}
- $crash = (isset($GLOBALS['message_crash_plugins'])?unserialize($GLOBALS['message_crash_plugins']):'');
+ $crash = (isset($GLOBALS['meta']['message_crash_plugins'])?unserialize($GLOBALS['meta']['message_crash_plugins']):'');
$crash = ($crash?$crash:array());
$crash[$file] = true;
ecrire_meta('message_crash_plugins',serialize($crash));
/**
- * Tester si une url est absolue
- * @param $url
+ * Tester si une URL est absolue
+ *
+ * On est sur le web, on exclut certains protocoles,
+ * notamment 'file://', 'php://' et d'autres…
+
+ * @param string $url
* @return bool
*/
-function tester_url_absolue($url){
- return preg_match(";^([a-z]+:)?//;Uims",trim($url))?true:false;
+function tester_url_absolue($url) {
+ $url = trim($url);
+ if (preg_match(";^([a-z]{3,7}:)?//;Uims", $url, $m)) {
+ if (
+ isset($m[1])
+ and $p = strtolower(rtrim($m[1], ':'))
+ and in_array($p, array('file', 'php', 'zlib', 'glob', 'phar', 'ssh2', 'rar', 'ogg', 'expect', 'zip'))
+ ) {
+ return false;
+ }
+ return true;
+ }
+ return false;
}
/**
$themes = array(_SPIP_THEME_PRIVE);
// lors d'une installation neuve, prefs n'est pas definie.
if (isset($GLOBALS['visiteur_session']['prefs'])) {
- $prefs = isset($GLOBALS['visiteur_session']['prefs']);
+ $prefs = $GLOBALS['visiteur_session']['prefs'];
} else {
$prefs = array();
}
include_once _ROOT_CWD . $a;
$inc[$dirname][$file] = $inc[''][$dirname . $file] = true;
}
- if (!defined('_SAUVER_CHEMIN'))
- define('_SAUVER_CHEMIN',true);
+ if (!defined('_SAUVER_CHEMIN')){
+ // si le chemin n'a pas encore ete charge, ne pas lever le flag, ne pas cacher
+ if (is_null($GLOBALS['path_files'])) return $a;
+ define('_SAUVER_CHEMIN', true);
+ }
return $GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file] = $GLOBALS['path_files'][$GLOBALS['path_sig']][''][$dirname . $file] = $a;
}
}
}
}
- if (!defined('_SAUVER_CHEMIN'))
- define('_SAUVER_CHEMIN',true);
+ if (!defined('_SAUVER_CHEMIN')){
+ // si le chemin n'a pas encore ete charge, ne pas lever le flag, ne pas cacher
+ if (is_null($GLOBALS['path_files'])) return false;
+ define('_SAUVER_CHEMIN', true);
+ }
return $GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file] = $GLOBALS['path_files'][$GLOBALS['path_sig']][''][$dirname . $file] = false;
}
// Fonctions de fabrication des URL des scripts de Spip
//
/**
- * l'URL de base du site, sans se fier a meta(adresse_site) qui
- * peut etre fausse (sites a plusieurs noms d'hotes, deplacements, erreurs)
+ * L'URL de base du site, en priorité sans se fier a meta(adresse_site) qui
+ * peut etre fausse (sites a plusieurs noms d'hotes, deplacements, erreurs).
+ * En dernier recours, lorsqu'on ne trouve rien, on utilise adresse_site comme fallback.
* Note : la globale $profondeur_url doit etre initialisee de maniere a
* indiquer le nombre de sous-repertoires de l'url courante par rapport a la
* racine de SPIP : par exemple, sur ecrire/ elle vaut 1, sur sedna/ 1, et a
OR (isset($_SERVER['HTTPS']) AND
test_valeur_serveur($_SERVER['HTTPS']))
) ? 'https' : 'http';
- # note : HTTP_HOST contient le :port si necessaire
+ // note : HTTP_HOST contient le :port si necessaire
$host = $_SERVER['HTTP_HOST'];
+ // 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);
+ }
+ }
if (isset($_SERVER['SERVER_PORT'])
AND $port=$_SERVER['SERVER_PORT']
AND strpos($host,":")==false){
$prof = max($prof,0);
$myself = ltrim($request,'/');
+ // 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);
+ $myself = implode('/',$myself);
+ }
# supprimer la chaine de GET
list($myself) = explode('?', $myself);
$url = join('/', array_slice(explode('/', $myself), 0, -1-$prof)).'/';
#if (!defined('_SPIP_LOCK_MODE')) define('_SPIP_LOCK_MODE',2); // utiliser le nfslock de spip mais link() est tres souvent interdite
}
+ // Langue par defaut
+ if (!defined('_LANGUE_PAR_DEFAUT')) define('_LANGUE_PAR_DEFAUT','fr');
+
+ // PHP_VERSION_ID dispo depuis PHP 5.2.7
+ if (!defined('PHP_VERSION_ID')) {
+ $version = explode('.',PHP_VERSION);
+ define('PHP_VERSION_ID', ($version[0] * 10000 + $version[1] * 100 + $version[2]));
+ }
+
//
// Module de lecture/ecriture/suppression de fichiers utilisant flock()
// (non surchargeable en l'etat ; attention si on utilise include_spip()
spip_desinfecte($_REQUEST);
// Par ailleurs on ne veut pas de magic_quotes au cours de l'execution
- @set_magic_quotes_runtime(0);
+ if (PHP_VERSION_ID<50300) {
+ @set_magic_quotes_runtime(0);
+ }
// Si les variables sont passees en global par le serveur,
// il faut faire quelques verifications de base
// on verifie que la memoire est suffisante pour le compactage css+js pour eviter la page blanche
// il y aura d'autres problemes et l'utilisateur n'ira pas tres loin, mais ce sera plus comprehensible qu'une page blanche
if (test_espace_prive() AND _MEMORY_LIMIT_MIN>8){
- if ($memory = trim(ini_get('memory_limit'))){
+ if ($memory = trim(ini_get('memory_limit')) and $memory != -1) {
$unit = strtolower(substr($memory,strlen($memory/1),1));
switch($unit) {
// Le modifieur 'G' est disponible depuis PHP 5.1.0