Version complète: sur le forum Webmaster Hub : Historique HTTP_REFERER
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > PHP
tonsite
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,
captain_torche
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.
Jeanluc
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
Théo B.
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.
wullon
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.
tonsite
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 ?
captain_torche
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 :
CODE
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 :
CODE
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.
tonsite
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 !

HTML
<?
// 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 :

HTML
<?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']. ');
?>
captain_torche
Il faut ajouter, en début de code, la fonction url1.
Ensuite, juste avant la ligne suivante :
CODE
$resultat_sql = mysql_query("select * from referants where referant like '$HTTP_REFERER'",$connexion);

tu ajoutes celle-ci
CODE
$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.
tonsite
CITATION(captain_torche @ mercredi 29 mars 2006, 19h28)
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 wink.gif

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
captain_torche
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.
tonsite
Oui c'est très bien comme ça !

Et j'ajouterais les autres type de page index, ex:

default.asp, default.aspx, index.htm, etc...

c'est possible ?
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.