Aller au contenu

Historique HTTP_REFERER


tonsite

Sujets conseillés

Bonjour,

j'aimerai faire un historique sur ma page d'accueil de l'origine des 100 derniers sites référents avec HTTP_REFERER.

exemple de résultat:

TOP 100 Référents

1 - urldusite.com - à 15:58 - 13 fois

2 - urldusite.com - à 15:06 - 56 fois

3 - urldusite.com - à 14:35 - 5 fois

si vous avez une idée de comment faire ?

alex,

Lien vers le commentaire
Partager sur d’autres sites

Pour faire ça, je te conseillerai de faire un script de stats (à peine plus compliqué, et ô combien utile par la suite).

Lorsque tu arrives sur une page du site, tu crées un identifiant de session, que tu enregistres dans une table de ta bdd, avec le referer, les infos navigateur, l'adresse IP.

Tu enregistres également, dans une seconde table, l'id correspondant à l'enregistrement dans la première, la page demandée, et la date en cours.

Ensuite, à chaque page accédée, tu vérifies l'existence de la variable de session dans ta bdd. Si elle l'existe, tu ne renseignes que la seconde table, sinon tu renseignes les deux.

Ensuite, sur ta page d'accueil, il ne te reste plus qu'à récuperer les valeurs récurrentes du Referer, et de faire tes stats.

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

Si tu mets les referrers sur la page d'accueil, attends-toi à être spammé grave par les sites les plus pourris du web. A déconseiller.

Jean-Luc

Lien vers le commentaire
Partager sur d’autres sites

Sauf si tu fais un tri ( ex : on regarde si il y a présence d'un lien sur la page en question, on mets des filtres pour les sites adultes, ... )

Tout ça est faisable en PHP et est proposé dans pas mal de scripts de stats.

Lien vers le commentaire
Partager sur d’autres sites

Ou alors tu protèges l'accès à la page de telle manière que les robots ne puissent pas la voir (cookie, login/mdp "donnés", etc...).

Parce que sinon, tu vas réellement te faire pourrir par des sites pas très jolis, je confirme.

D'ailleurs je ne connais aucun "gros" site qui a ses stats de referers publiques.

Lien vers le commentaire
Partager sur d’autres sites

Posté (modifié)

Merci pour vos réponses,

J'ai trouvé à peu près ce que je chercher : Les Référants v1.0 par Laurent Adda

Il me reste plus qu'a l'adapté.

Premier problème :

Je veux enregistrer dans la db seulement le nom de domaine et nom pas l'url entière du HTTP_REFERER

Par exemple:

www.le-site.com

au lieu de :

www.le-site.com/lien-de-fou/hyper-long/puis-enfin/la-page.htm

comment puis-je faire ?

Modifié par tonsite
Lien vers le commentaire
Partager sur d’autres sites

Si tu veux juste la forme www.site.com, il va falloir utiliser la fonction str_replace pour supprimer 'http://', la fonction strpos pour trouver la place du premier slash, et la fonction susbtr pour retourner la portion d'adresse qui te convienne.

Ca pourrait donner, par exemple :

function url1($url) {
$url_sans_http = str_replace('http://', '', $url);
$position_slash = strpos($url_sans_http, '/');
return substr($url_sans_http, 0, $position_slash);
}
echo url1('www.le-site.com/lien-de-fou/hyper-long/puis-enfin/la-page.htm');

Tu peux également utiliser les expressions régulières :

function url2($url) {
if(ereg("(http://)?([^/]+).*", $url, $reg))
 return $reg[2];
}

echo url2('www.le-site.com/lien-de-fou/hyper-long/puis-enfin/la-page.htm');

Je ne saurais pas te dire laquelle des deux fonctions est la moins gourmande en ressources côté serveur, si jamais un autre hubber le sait, je serais intéressé de le découvrir.

Lien vers le commentaire
Partager sur d’autres sites

C'est exactement ce que je voulais faire merci

Maintenant j'aimerai formater directement l'url du HTTP_REFERER avant de l'envoyer à la db, mais j'ai pas de commentaire avec ce code, si quelqu'un peu me le commenter ce serrai vraiement sympas !

<?
// parametres de connexion require("config.php3");

// connexion au serveur MySQL
$connexion = mysql_connect("$dbhost","$user","$password");
if ( !$connexion ) { echo "Impossible d'effectuer la connexion"; exit; }

// sélection de la base de données
$db = mysql_select_db("$usebdd", $connexion);
if ( !$db ) { echo "Impossible de sélectionner cette base de données"; exit; }

if ( isset($HTTP_REFERER) && (strtolower(substr($HTTP_REFERER, 0, strlen($url))) != $url) )
{
$resultat_sql = mysql_query("select * from referants where referant like '$HTTP_REFERER'",$connexion);
$nombreligne = mysql_num_rows($resultat_sql);
if ($nombreligne == 0)
{
$resultat_sql = mysql_query("insert into referants (referant, hits) values ('$HTTP_REFERER', '1')",$connexion);
}
elseif ($nombreligne > 0)
{
$hits = mysql_result($resultat_sql,0,"hits");
$hits++;
$resultat_sql = mysql_query("update referants set hits='$hits' where referant like '$HTTP_REFERER'",$connexion);
}
}

// déconnexion
mysql_close($connexion);
?>

je voudrais y inclure cette fonction :

<?php
function url1($url) {
$url_sans_http = str_replace('http://', '', $url);
$position_slash = strpos($url_sans_http, '/');
return substr($url_sans_http, 0, $position_slash);
}
echo url1(' $_SERVER['HTTP_REFERER']. ');
?>

Lien vers le commentaire
Partager sur d’autres sites

Il faut ajouter, en début de code, la fonction url1.

Ensuite, juste avant la ligne suivante :

$resultat_sql = mysql_query("select * from referants where referant like '$HTTP_REFERER'",$connexion);

tu ajoutes celle-ci

$HTTP_REFERER = url1($HTTP_REFERER);

Mais sinon, je ne saurais que te conseiller de te plonger un peu plus dans le PHP, le code que tu as posté n'est réellement pas compliqué à comprendre.

Lien vers le commentaire
Partager sur d’autres sites

Mais sinon, je ne saurais que te conseiller de te plonger un peu plus dans le PHP

je découvre tout juste php et grâce à votre aide je comprend chaque jour un peu ptit plus comment ça marche, alors merci !!!

pour en revenir à la fonction, j'ai réussi à l'intégré dans le code mais c'était moins propre que ta solution, donc je l'ai adopter ;)

j'aimerai modifié la fonction url1 de façon à ce quelle ignore les urls qui sont plus grande que le domaine, exemple:

si l'adresse est comme ça:

www.lesite.com

c'est ok

et si elle est comme ça:

www.lesite.com/kekchose

il l'ignore

car je voudrais seulement afficher les sites qui ont un lien vers mon site sur leur page d'accueil

Lien vers le commentaire
Partager sur d’autres sites

On pourrait faire en sorte de ne cibler que les pages index.html, ou index.php à la racine du site, mais ça empêcherait un site qui aurait sa page d'accueil ailleurs (avec une redirection, par exemple), de s'afficher.

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...