X-Git-Url: http://git.cyclocoop.org/?p=lhc%2Fweb%2Fclavette_www.git;a=blobdiff_plain;f=www%2Fecrire%2Finc%2Futils.php;h=d0653b77b40921f10d57b7c32ba0a82c73739f3b;hp=1650013474d9caf3861eaf388ad8aaad62a341ec;hb=cc641eb476987612f6d6df1a5417c1c5582a8ab8;hpb=7d84a490677fb716a1fd4df260f8eab35f6a8506 diff --git a/www/ecrire/inc/utils.php b/www/ecrire/inc/utils.php index 1650013..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