X-Git-Url: http://git.cyclocoop.org/?a=blobdiff_plain;ds=sidebyside;f=www%2Fecrire%2Finc%2Futils.php;h=d0653b77b40921f10d57b7c32ba0a82c73739f3b;hb=cc641eb476987612f6d6df1a5417c1c5582a8ab8;hp=a76b0fd8aadb786c5403ba2f334395244da5a397;hpb=83e62ea97fafb78dde1372b78c1be4c71b5b1b58;p=lhc%2Fweb%2Fclavette_www.git
diff --git a/www/ecrire/inc/utils.php b/www/ecrire/inc/utils.php
index a76b0fd..d0653b7 100644
--- a/www/ecrire/inc/utils.php
+++ b/www/ecrire/inc/utils.php
@@ -3,7 +3,7 @@
/***************************************************************************\
* 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. *
@@ -45,7 +45,9 @@ function charger_fonction($nom, $dossier='exec', $continue=false) {
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)
@@ -66,7 +68,8 @@ function charger_fonction($nom, $dossier='exec', $continue=false) {
include_spip('inc/minipres');
echo minipres(_T('forum_titre_erreur'),
- _T('fichier_introuvable', array('fichier'=> ''.spip_htmlentities($d).'')));
+ _T('fichier_introuvable', array('fichier'=> ''.spip_htmlentities($d).'')),
+ array('all_inline'=>true,'status'=>404));
exit;
}
@@ -77,7 +80,7 @@ function charger_fonction($nom, $dossier='exec', $continue=false) {
*/
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));
@@ -271,12 +274,27 @@ function set_request($var, $val = NULL, $c=false) {
/**
- * 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;
}
/**
@@ -872,7 +890,7 @@ function lister_themes_prives(){
$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();
}
@@ -969,8 +987,11 @@ function find_in_path ($file, $dirname='', $include=false) {
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;
}
}
@@ -988,8 +1009,11 @@ function find_in_path ($file, $dirname='', $include=false) {
}
}
- 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;
}
@@ -1214,8 +1238,9 @@ function test_valeur_serveur($truc) {
// 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
@@ -1246,8 +1271,16 @@ function url_de_base($profondeur=null) {
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){
@@ -1281,6 +1314,16 @@ function url_de_($http,$host,$request,$prof=0){
$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)).'/';
@@ -1568,6 +1611,15 @@ function spip_initialisation_core($pi=NULL, $pa=NULL, $ti=NULL, $ta=NULL) {
#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()
@@ -1593,7 +1645,9 @@ function spip_initialisation_core($pi=NULL, $pa=NULL, $ti=NULL, $ta=NULL) {
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
@@ -1785,7 +1839,7 @@ function spip_initialisation_suite() {
// 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
@@ -1873,6 +1927,7 @@ function init_var_mode(){
if (!defined('_VAR_MODE')) define('_VAR_MODE',$_GET['var_mode']);
break;
}
+ if (isset($GLOBALS['visiteur_session']['nom']))
spip_log($GLOBALS['visiteur_session']['nom']
. " "._VAR_MODE);
}