本文整理汇总了PHP中url_de_base函数的典型用法代码示例。如果您正苦于以下问题:PHP url_de_base函数的具体用法?PHP url_de_base怎么用?PHP url_de_base使用的例子?那么, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了url_de_base函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: message_oubli
function message_oubli($email, $param)
{
$r = formulaires_oubli_mail($email);
if (is_array($r) AND $r[1]) {
include_spip('inc/acces'); # pour creer_uniqid
include_spip('inc/texte'); # pour corriger_typo
$cookie = creer_uniqid();
sql_updateq("spip_auteurs", array("cookie_oubli" => $cookie), "id_auteur=" . $r[1]['id_auteur']);
$nom = textebrut(corriger_typo($GLOBALS['meta']["nom_site"]));
$envoyer_mail = charger_fonction('envoyer_mail','inc');
if ($envoyer_mail($email,
("[$nom] " . _T('pass_oubli_mot')),
_T('pass_mail_passcookie',
array('nom_site_spip' => $nom,
'adresse_site' => url_de_base(),
'sendcookie' => generer_url_public('spip_pass',
"$param=$cookie", true)))) )
return _T('pass_recevoir_mail');
else
return _T('pass_erreur_probleme_technique');
}
return _T('pass_erreur_probleme_technique');
}
示例2: url_absolue
function url_absolue($url, $base='') {
if (strlen($url = trim($url)) == 0)
return '';
if (!$base)
$base = url_de_base() . (_DIR_RACINE ? _DIR_RESTREINT_ABS : '');
return suivre_lien($base, $url);
}
示例3: action_logout_dist
/**
* Se deloger
* Pour eviter les CSRF on passe par une etape de confirmation si pas de jeton,
* avec un autosubmit js pour ne pas compliquer l'experience utilisateur
*
* http://doc.spip.org/@action_logout_dist
*
*/
function action_logout_dist()
{
$logout =_request('logout');
$url = _request('url');
// seul le loge peut se deloger
// (mais id_auteur peut valoir 0 apres une restauration avortee)
if (isset($GLOBALS['visiteur_session']['id_auteur'])
AND is_numeric($GLOBALS['visiteur_session']['id_auteur'])
// des sessions anonymes avec id_auteur=0 existent,
// mais elles n'ont pas de statut : verifier ca aussi
AND isset($GLOBALS['visiteur_session']['statut'])) {
// relancer si pas de jeton
if (!action_logout_secu($logout, $url, _request('jeton'))) {
return; // page submit retournee
} elseif (isset($_COOKIE['spip_session'])) {
// le logout explicite vaut destruction de toutes les sessions
$session = charger_fonction('session', 'inc');
$session($GLOBALS['visiteur_session']['id_auteur']);
spip_setcookie('spip_session', $_COOKIE['spip_session'], time()-3600);
}
include_spip('inc/auth');
auth_trace($GLOBALS['visiteur_session'],'0000-00-00 00:00:00');
}
// Action terminee (ou non faite si pas les droits) on redirige.
// Cas particulier, logout dans l'espace public
$url = securiser_redirect_action($url);
if ($logout == 'public' AND !$url)
$url = url_de_base();
include_spip('inc/headers');
redirige_par_entete($url
// contrer le cache navigateur (Safari3)
? parametre_url($url, 'var_hasard', uniqid(rand()), '&')
: generer_url_public('login'));
}
示例4: redirige_formulaire
function redirige_formulaire($url, $equiv = '', $format = 'message')
{
if (!_AJAX and !headers_sent() and !_request('var_ajax')) {
redirige_par_entete(str_replace('&', '&', $url), $equiv);
} elseif ($format == 'ajaxform' and preg_match(',^#[0-9a-z\\-_]+$,i', $url)) {
return array("<a href='{$url}' name='ajax_ancre' style='display:none;'>anchor</a>", '');
} else {
// ne pas laisser passer n'importe quoi dans l'url
$url = str_replace(array('<', '"'), array('<', '"'), $url);
$url = strtr($url, "\n\r", " ");
# en theorie on devrait faire ca tout le temps, mais quand la chaine
# commence par ? c'est imperatif, sinon l'url finale n'est pas la bonne
if ($url[0] == '?') {
$url = url_de_base() . $url;
}
$url = str_replace('&', '&', $url);
spip_log("redirige formulaire ajax: {$url}");
include_spip('inc/filtres');
if ($format == 'ajaxform') {
return array('<a href="' . quote_amp($url) . '" name="ajax_redirect" style="display:none;">' . _T('navigateur_pas_redirige') . '</a>', '<br /><a href="' . quote_amp($url) . '">' . _T('navigateur_pas_redirige') . '</a>');
} else {
// format message texte, tout en js inline
return "<script type='text/javascript'>if (parent.window){parent.window.document.location.replace(\"{$url}\");} else {document.location.replace(\"{$url}\");}</script>" . http_img_pack('searching.gif', '') . '<br />' . '<a href="' . quote_amp($url) . '">' . _T('navigateur_pas_redirige') . '</a>';
}
}
}
示例5: action_logout_dist
function action_logout_dist()
{
global $visiteur_session, $ignore_auth_http;
$logout = _request('logout');
$url = securiser_redirect_action(_request('url'));
// cas particulier, logout dans l'espace public
if ($logout == 'public' and !$url) {
$url = url_de_base();
}
// seul le loge peut se deloger (mais id_auteur peut valoir 0 apres une restauration avortee)
if (is_numeric($visiteur_session['id_auteur'])) {
include_spip('inc/auth');
auth_trace($visiteur_session, '0000-00-00 00:00:00');
// le logout explicite vaut destruction de toutes les sessions
if (isset($_COOKIE['spip_session'])) {
$session = charger_fonction('session', 'inc');
$session($visiteur_session['id_auteur']);
spip_setcookie('spip_session', $_COOKIE['spip_session'], time() - 3600);
}
// si authentification http, et que la personne est loge,
// pour se deconnecter, il faut proposer un nouveau formulaire de connexion http
if (isset($_SERVER['PHP_AUTH_USER']) and !$ignore_auth_http and $GLOBALS['auth_can_disconnect']) {
ask_php_auth(_T('login_deconnexion_ok'), _T('login_verifiez_navigateur'), _T('login_retour_public'), "redirect=" . _DIR_RESTREINT_ABS, _T('login_test_navigateur'), true);
}
}
// Rediriger en contrant le cache navigateur (Safari3)
include_spip('inc/headers');
redirige_par_entete($url ? parametre_url($url, 'var_hasard', uniqid(rand()), '&') : generer_url_public('login'));
}
示例6: skeleditor_extraire_css
function skeleditor_extraire_css($texte){
$url_base = url_de_base();
$url_page = substr(generer_url_public('A'), 0, -1);
$dir = preg_quote($url_page,',').'|'.preg_quote(preg_replace(",^$url_base,",_DIR_RACINE,$url_page),',');
$css = array();
// trouver toutes les css pour les afficher dans le bouton
// repris du compresseur
foreach (extraire_balises($texte, 'link') as $s) {
if (extraire_attribut($s, 'rel') === 'stylesheet'
AND (!($type = extraire_attribut($s, 'type'))
OR $type == 'text/css')
AND !strlen(strip_tags($s))
AND $src = preg_replace(",^$url_base,",_DIR_RACINE,extraire_attribut($s, 'href'))
AND (
// regarder si c'est du format spip.php?page=xxx
preg_match(',^('.$dir.')(.*)$,', $src, $r)
OR (
// ou si c'est un fichier
// enlever un timestamp eventuel derriere un nom de fichier statique
$src2 = preg_replace(",[.]css[?].+$,",'.css',$src)
// verifier qu'il n'y a pas de ../ ni / au debut (securite)
AND !preg_match(',(^/|\.\.),', substr($src2,strlen(_DIR_RACINE)))
// et si il est lisible
AND @is_readable($src2)
)
)) {
if ($r)
$css[$s] = explode('&',
str_replace('&', '&', $r[2]), 2);
else{
$file = preg_replace(",[?]\d+$,","",$src);
if (strncmp($file,_DIR_VAR,strlen(_DIR_VAR))==0){
lire_fichier($file,$c);
if (preg_match(",^\/\*\s*(#@.*)\s*\*\/,Uims",$c,$m)){
$inc = explode("#@",$m[1]);
$inc = array_map('trim',$inc);
$inc = array_filter($inc);
foreach($inc as $i){
if (!in_array($i,$css))
$css["$s:$i"] = $i;
}
}
}
else
$css[$s] = $file;
}
}
}
return $css;
}
示例7: spip_setcookie
function spip_setcookie($name = '', $value = '', $expire = 0, $path = 'AUTO', $domain = '', $secure = '')
{
$name = preg_replace('/^spip_/', $GLOBALS['cookie_prefix'] . '_', $name);
if ($path == 'AUTO') {
$path = defined('_COOKIE_PATH') ? _COOKIE_PATH : preg_replace(',^\\w+://[^/]*,', '', url_de_base());
}
if (!$domain and defined('_COOKIE_DOMAIN')) {
$domain = _COOKIE_DOMAIN;
}
#spip_log("cookie('$name', '$value', '$expire', '$path', '$domain', '$secure', '$httponly'");
// liste des cookies en httponly (a passer en define si besoin)
$httponly = in_array($name, explode(' ', 'spip_session'));
$a = ($httponly and strnatcmp(phpversion(), '5.2.0') >= 0) ? @setcookie($name, $value, $expire, $path, $domain, $secure, $httponly) : ($secure ? @setcookie($name, $value, $expire, $path, $domain, $secure) : ($domain ? @setcookie($name, $value, $expire, $path, $domain) : ($path ? @setcookie($name, $value, $expire, $path) : ($expire ? @setcookie($name, $value, $expire) : @setcookie($name, $value)))));
spip_cookie_envoye(true);
return $a;
}
示例8: securiser_redirect_action
function securiser_redirect_action($redirect)
{
if ((tester_url_absolue($redirect) or preg_match(',^\\w+:,', trim($redirect))) and !defined('_AUTORISER_ACTION_ABS_REDIRECT')) {
// si l'url est une url du site, on la laisse passer sans rien faire
// c'est encore le plus simple
$base = $GLOBALS['meta']['adresse_site'] . "/";
if (strlen($base) and strncmp($redirect, $base, strlen($base)) == 0) {
return $redirect;
}
$base = url_de_base();
if (strlen($base) and strncmp($redirect, $base, strlen($base)) == 0) {
return $redirect;
}
return "";
}
return $redirect;
}
示例9: action_logout_dist
/**
* Se deloger
* Pour eviter les CSRF on passe par une etape de confirmation si pas de jeton fourni
* avec un autosubmit js pour ne pas compliquer l'experience utilisateur
*
* Déconnecte l'utilisateur en cours et le redirige sur l'URL indiquée par
* l'argument de l'action sécurisée, et sinon sur la page d'accueil
* de l'espace public.
*
*/
function action_logout_dist()
{
$logout = _request('logout');
$url = securiser_redirect_action(_request('url'));
// cas particulier, logout dans l'espace public
if ($logout == 'public' and !$url) {
$url = url_de_base();
}
// seul le loge peut se deloger (mais id_auteur peut valoir 0 apres une restauration avortee)
if (isset($GLOBALS['visiteur_session']['id_auteur']) and is_numeric($GLOBALS['visiteur_session']['id_auteur']) and isset($GLOBALS['visiteur_session']['statut'])) {
// il faut un jeton pour fermer la session (eviter les CSRF)
if (!($jeton = _request('jeton')) or !verifier_jeton_logout($jeton, $GLOBALS['visiteur_session'])) {
$jeton = generer_jeton_logout($GLOBALS['visiteur_session']);
$action = generer_url_action("logout", "jeton={$jeton}");
$action = parametre_url($action, 'logout', _request('logout'));
$action = parametre_url($action, 'url', _request('url'));
include_spip("inc/minipres");
include_spip("inc/filtres");
$texte = bouton_action(_T('spip:icone_deconnecter'), $action);
$texte = "<div class='boutons'>{$texte}</div>";
$texte .= '<script type="text/javascript">document.write("<style>body{visibility:hidden;}</style>");window.document.forms[0].submit();</script>';
$res = minipres(_T('spip:icone_deconnecter'), $texte, '', true);
echo $res;
return;
}
include_spip('inc/auth');
auth_trace($GLOBALS['visiteur_session'], '0000-00-00 00:00:00');
// le logout explicite vaut destruction de toutes les sessions
if (isset($_COOKIE['spip_session'])) {
$session = charger_fonction('session', 'inc');
$session($GLOBALS['visiteur_session']['id_auteur']);
spip_setcookie('spip_session', $_COOKIE['spip_session'], time() - 3600);
}
// si authentification http, et que la personne est loge,
// pour se deconnecter, il faut proposer un nouveau formulaire de connexion http
if (isset($_SERVER['PHP_AUTH_USER']) and !$GLOBALS['ignore_auth_http'] and $GLOBALS['auth_can_disconnect']) {
ask_php_auth(_T('login_deconnexion_ok'), _T('login_verifiez_navigateur'), _T('login_retour_public'), "redirect=" . _DIR_RESTREINT_ABS, _T('login_test_navigateur'), true);
}
}
// Rediriger en contrant le cache navigateur (Safari3)
include_spip('inc/headers');
redirige_par_entete($url ? parametre_url($url, 'var_hasard', uniqid(rand()), '&') : generer_url_public('login'));
}
示例10: spip_setcookie
function spip_setcookie ($name='', $value='', $expire=0, $path='AUTO', $domain='', $secure='') {
$name = preg_replace ('/^spip_/', $GLOBALS['cookie_prefix'].'_', $name);
if ($path == 'AUTO')
$path = defined('_COOKIE_PATH')?_COOKIE_PATH:preg_replace(',^\w+://[^/]*,', '', url_de_base());
if (!$domain AND defined('_COOKIE_DOMAIN'))
$domain = _COOKIE_DOMAIN;
#spip_log("cookie('$name', '$value', '$expire', '$path', '$domain', '$secure'");
if ($secure)
@setcookie ($name, $value, $expire, $path, $domain, $secure);
else if ($domain)
@setcookie ($name, $value, $expire, $path, $domain);
else if ($path)
@setcookie ($name, $value, $expire, $path);
else if ($expire)
@setcookie ($name, $value, $expire);
else
@setcookie ($name, $value);
}
示例11: inc_lien
function inc_lien($lien, $texte = '', $class = '', $title = '', $hlang = '', $rel = '', $connect = '')
{
# Tests TW
if (!$GLOBALS['tw']) {
return inc_lien_dist($lien, $texte, $class, $title, $hlang, $rel, $connect);
}
static $u = null;
if (!$u) {
$u = url_de_base();
}
$typo = false;
// Si une langue est demandee sur un raccourci d'article, chercher
// la traduction ;
// - [{en}->art2] => traduction anglaise de l'article 2, sinon art 2
// - [{}->art2] => traduction en langue courante de l'art 2, sinon art 2
if ($hlang and $match = typer_raccourci($lien)) {
@(list($type, , $id, , $args, , $ancre) = $match);
if ($id_trad = sql_getfetsel('id_trad', 'spip_articles', "id_article={$id}") and $id_dest = sql_getfetsel('id_article', 'spip_articles', "id_trad={$id_trad} AND lang=" . sql_quote($hlang))) {
$lien = "{$type}{$id_dest}";
} else {
$hlang = '';
}
}
$mode = ($texte and $class) ? 'url' : 'tout';
$lien = calculer_url($lien, $texte, $mode, $connect);
if ($mode === 'tout') {
$texte = $lien['titre'];
if (!$class and isset($lien['class'])) {
$class = $lien['class'];
}
$lang = isset($lien['lang']) ? $lien['lang'] : '';
$mime = isset($lien['mime']) ? " type='" . $lien['mime'] . "'" : "";
$lien = $lien['url'];
}
$lien = trim($lien);
if (strncmp($lien, "#", 1) == 0) {
# ancres pures (internes a la page)
$class = 'spip_ancre';
} elseif (strncasecmp($lien, 'mailto:', 7) == 0) {
# pseudo URL de mail
$class = "spip_mail";
} elseif (strncmp($texte, '<html>', 6) == 0) {
# cf traiter_lien_explicite
$class = "spip_url spip_out";
} elseif (!$class) {
$class = "spip_out";
}
# si pas spip_in|spip_glossaire
// Si l'objet n'est pas de la langue courante, on ajoute hreflang
if (!$hlang and $lang !== $GLOBALS['spip_lang']) {
$hlang = $lang;
}
$lang = $hlang ? " hreflang='{$hlang}'" : '';
if ($title) {
$title = ' title="' . attribut_html($title) . '"';
}
// rel=external pour les liens externes
if ((strncmp($lien, 'http://', 7) == 0 or strncmp($lien, 'https://', 8) == 0) and strncmp("{$lien}/", $u, strlen($u)) != 0) {
$rel = trim("{$rel} external");
}
if ($rel) {
$rel = " rel='{$rel}'";
}
if (traiter_modeles($texte, false, $echapper ? 'TYPO' : '', $connect) == $texte) {
$texte = typo($texte, true, $connect);
$lien = "<a href=\"" . str_replace('"', '"', $lien) . "\" class='{$class}'{$lang}{$title}{$rel}{$mime}>{$texte}</a>";
return $lien;
}
# ceci s'execute heureusement avant les tableaux et leur "|".
# Attention, le texte initial est deja echappe mais pas forcement
# celui retourne par calculer_url.
# Penser au cas [<imgXX|right>->URL], qui exige typo('<a>...</a>')
$lien = "<a href=\"" . str_replace('"', '"', $lien) . "\" class='{$class}'{$lang}{$title}{$rel}{$mime}>{$texte}</a>";
return typo($lien, true, $connect);
}
示例12: inc_lien_dist
function inc_lien_dist($lien, $texte='', $class='', $title='', $hlang='', $rel='', $connect='')
{
// Si une langue est demandee sur un raccourci d'article, chercher
// la traduction ;
// - [{en}->art2] => traduction anglaise de l'article 2, sinon art 2
// - [{}->art2] => traduction en langue courante de l'art 2, sinon art 2
if ($hlang
AND $match = typer_raccourci($lien)) {
@list($type,,$id,,$args,,$ancre) = $match;
if ($id_trad = sql_getfetsel('id_trad', 'spip_articles', "id_article=$id")
AND $id_dest = sql_getfetsel('id_article', 'spip_articles',
"id_trad=$id_trad AND statut<>'refuse' AND lang=" . sql_quote($hlang))
)
$lien = "$type$id_dest";
else
$hlang = '';
}
$mode = ($texte AND $class) ? 'url' : 'tout';
$lien = calculer_url($lien, $texte, $mode, $connect);
if ($mode === 'tout') {
$texte = $lien['titre'];
if (!$class AND isset($lien['class'])) $class = $lien['class'];
$lang = isset($lien['lang']) ?$lien['lang'] : '';
$mime = isset($lien['mime']) ? " type='".$lien['mime']."'" : "";
$lien = $lien['url'];
}
if (substr($lien,0,1) == '#') # ancres pures (internes a la page)
$class = 'spip_ancre';
elseif (preg_match('/^\s*mailto:/',$lien)) # pseudo URL de mail
$class = "spip_mail";
elseif (preg_match('/^<html>/',$texte)) # cf traiter_lien_explicite
$class = "spip_url spip_out";
elseif (!$class) {
# spip_out sur les URLs externes
if (preg_match(',^\w+://,iS', $lien)
AND strncasecmp($lien, url_de_base(), strlen(url_de_base()))
)
$class = "spip_out"; # si pas spip_in|spip_glossaire
}
// Si l'objet n'est pas de la langue courante, on ajoute hreflang
if (!$hlang AND $lang!==$GLOBALS['spip_lang'])
$hlang = $lang;
$lang = ($hlang ? " hreflang='$hlang'" : '');
if ($title)
$title = ' title="'.texte_backend($title).'"';
else
$title = ''; // $title peut etre 'false'
// rel=external pour les liens externes
if (preg_match(',^https?://,S', $lien)
AND false === strpos("$lien/", url_de_base()))
$rel = trim("$rel external");
if ($rel) $rel = " rel='$rel'";
$lien = "<a href=\"".str_replace('"', '"', $lien)."\" class='$class'$lang$title$rel$mime>$texte</a>";
# ceci s'execute heureusement avant les tableaux et leur "|".
# Attention, le texte initial est deja echappe mais pas forcement
# celui retourne par calculer_url.
# Penser au cas [<imgXX|right>->URL], qui exige typo('<a>...</a>')
return typo($lien, true, $connect);
}
示例13: verifier_htaccess
/**
* Installe ou vérifie un fichier .htaccess, y compris sa prise en compte par Apache
*
* @uses recuperer_lapage()
* @param string $rep
* Nom du répertoire où SPIP doit vérifier l'existence d'un fichier .htaccess
* @param bool $force
* @return boolean
*/
function verifier_htaccess($rep, $force = false)
{
$htaccess = rtrim($rep, "/") . "/" . _ACCESS_FILE_NAME;
if ((@file_exists($htaccess) or defined('_TEST_DIRS')) and !$force) {
return true;
}
// directive deny compatible Apache 2.0+
$deny = "# Deny all requests from Apache 2.4+.\n<IfModule mod_authz_core.c>\n Require all denied\n</IfModule>\n# Deny all requests from Apache 2.0-2.2.\n<IfModule !mod_authz_core.c>\n Deny from all\n</IfModule>\n";
// support des vieilles versions Apache 1.x mais uniquement si elles l'annoncent (pas en mode PROD)
if (function_exists('apache_get_version') and $v = apache_get_version() and strncmp($v, "Apache/1.", 9) == 0) {
$deny = "deny from all\n";
}
if ($ht = @fopen($htaccess, "w")) {
fputs($ht, $deny);
fclose($ht);
@chmod($htaccess, _SPIP_CHMOD & 0666);
$t = rtrim($rep, "/") . "/.ok";
if ($ht = @fopen($t, "w")) {
@fclose($ht);
include_spip('inc/distant');
$t = substr($t, strlen(_DIR_RACINE));
$t = url_de_base() . $t;
$ht = recuperer_lapage($t, false, 'HEAD', 0);
// htaccess inoperant si on a recupere des entetes HTTP
// (ignorer la reussite si connexion par fopen)
$ht = !(isset($ht[0]) and $ht[0]);
}
}
spip_log("Creation de {$htaccess} " . ($ht ? " reussie" : " manquee"));
return $ht;
}
示例14: appliquer_modifs_config
function appliquer_modifs_config($purger_skel=false) {
if (($i = _request('adresse_site'))!==NULL){
if (!strlen($i)) {$GLOBALS['profondeur_url']=_DIR_RESTREINT?0:1;$i = url_de_base();}
$_POST['adresse_site'] = preg_replace(",/?\s*$,", "", $i);
}
// provoquer l'envoi des nouveautes en supprimant le fichier lock
if (_request('envoi_now')) {
spip_unlink(_DIR_TMP . 'mail.lock');
}
// Purger les squelettes si un changement de meta les affecte
if ($i = _request('post_dates') AND ($i != $GLOBALS['meta']["post_dates"]))
$purger_skel = true;
if ($accepter_forum = _request('forums_publics')
AND ($accepter_forum != $GLOBALS['meta']["forums_publics"])) {
$purger_skel = true;
$accepter_forum = substr($accepter_forum,0,3);
}
// Appliquer les changements de moderation forum
// forums_publics_appliquer : futur, saufnon, tous
if (in_array($appliquer = _request('forums_publics_appliquer'),
array('tous', 'saufnon')
)) {
$sauf = ($appliquer == 'saufnon')
? "accepter_forum != 'non'"
: '';
sql_updateq('spip_articles', array('accepter_forum'=>$accepter_forum), $sauf);
}
if ($accepter_forum == 'abo')
ecrire_meta('accepter_visiteurs', 'oui');
if ($i = _request('langues_auth') AND is_array($i)) {
set_request('langues_multilingue', join($i, ","));
}
// Modification du reglage accepter_inscriptions => vider le cache
// (pour repercuter la modif sur le panneau de login)
if (($i = _request('accepter_inscriptions')
AND $i != $GLOBALS['meta']['accepter_inscriptions'])
OR ($i = _request('accepter_visiteurs')
AND $i != $GLOBALS['meta']['accepter_visiteurs'])) {
include_spip('inc/invalideur');
suivre_invalideur("1"); # tout effacer
}
foreach(liste_metas() as $i => $v) {
if (($x =_request($i))!==NULL)
ecrire_meta($i, $x);
elseif (!isset($GLOBALS['meta'][$i]))
ecrire_meta($i, $v);
}
if ($lang = _request('changer_langue_site')) {
include_spip('inc/lang');
// verif que la langue demandee est licite
if (changer_langue($lang)) {
ecrire_meta('langue_site', $lang);
}
// le test a defait ca:
utiliser_langue_visiteur();
}
if ($purger_skel) {
include_spip('inc/invalideur');
purger_repertoire(_DIR_SKELS);
}
}
示例15: public_stats_dist
/**
* Logue une visite sur une page
*
* Enregistre le passage d'un visiteur sur la page demandée
* dans `tmp/visites/` qui seront ensuite traitées par une tache cron.
*
* Ne tient pas compte
* - des visites de robots,
* - des 404,
* - des forum
*
* @see genie_visites_dist() Pour la tache cron qui traite les logs.
*
* @param array|null $contexte
* Contexte d'appel de la page ; retrouvé automatiquement sinon.
* @param string|null $referer
* Referer de provenance ; retrouvé automatiquement sinon.
* @return null|void
**/
function public_stats_dist($contexte = null, $referer = null)
{
if (!is_array($contexte)) {
$contexte = $GLOBALS['contexte'];
}
if (is_null($referer)) {
// $_SERVER["HTTP_REFERER"] ne fonctionne pas partout
if (isset($_SERVER['HTTP_REFERER'])) {
$referer = $_SERVER['HTTP_REFERER'];
} else {
if (isset($GLOBALS["HTTP_SERVER_VARS"]["HTTP_REFERER"])) {
$referer = $GLOBALS["HTTP_SERVER_VARS"]["HTTP_REFERER"];
}
}
}
// Rejet des robots (qui sont pourtant des humains comme les autres)
if (_IS_BOT or isset($referer) and strpbrk($referer, '<>"\'')) {
return;
}
// Ne pas tenir compte des tentatives de spam des forums
if ($_SERVER['REQUEST_METHOD'] !== 'GET' or isset($contexte['page']) and $contexte['page'] == 'forum') {
return;
}
// rejet des pages 404
if (isset($GLOBALS['page']['status']) and $GLOBALS['page']['status'] == 404) {
return;
}
// Identification du client
$client_id = substr(md5($GLOBALS['ip'] . (isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : '') . (isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) ? $_SERVER['HTTP_ACCEPT_LANGUAGE'] : '') . (isset($_SERVER['HTTP_ACCEPT_ENCODING']) ? $_SERVER['HTTP_ACCEPT_ENCODING'] : '')), 0, 10);
// Analyse du referer
$log_referer = '';
if (isset($referer)) {
$url_site_spip = preg_replace(',/$,', '', preg_replace(',^(https?://)?(www\\.)?,i', '', url_de_base()));
if (!($url_site_spip != '' and strpos('-' . strtolower($referer), strtolower($url_site_spip)) and strpos($referer, "recherche=") === false)) {
$log_referer = $referer;
}
}
//
// stockage sous forme de fichier tmp/visites/client_id
//
// 1. Chercher s'il existe deja une session pour ce numero IP.
$content = array();
$fichier = sous_repertoire(_DIR_TMP, 'visites') . $client_id;
if (lire_fichier($fichier, $content)) {
$content = @unserialize($content);
}
// 2. Plafonner le nombre de hits pris en compte pour un IP (robots etc.)
// et ecrire la session
if (count($content) < 200) {
// Identification de l'element
if (isset($contexte['id_article'])) {
$log_type = "article";
} else {
if (isset($contexte['id_breve'])) {
$log_type = "breve";
} else {
if (isset($contexte['id_rubrique'])) {
$log_type = "rubrique";
} else {
$log_type = "";
}
}
}
if ($log_type) {
$log_type .= "\t" . intval($contexte["id_{$log_type}"]);
} else {
$log_type = "autre\t0";
}
$log_type .= "\t" . trim($log_referer);
if (isset($content[$log_type])) {
$content[$log_type]++;
} else {
$content[$log_type] = 1;
}
// bienvenue au club
ecrire_fichier($fichier, serialize($content));
} else {
$flood = sous_repertoire(_DIR_TMP, 'flood') . $GLOBALS['ip'];
@touch($flood);
}
}