tonsite Posté 28 Mars 2006 Posté 28 Mars 2006 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 Posté 28 Mars 2006 Posté 28 Mars 2006 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 Posté 28 Mars 2006 Posté 28 Mars 2006 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. Posté 28 Mars 2006 Posté 28 Mars 2006 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 Posté 28 Mars 2006 Posté 28 Mars 2006 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 Posté 28 Mars 2006 Auteur Posté 28 Mars 2006 (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é 29 Mars 2006 par tonsite
captain_torche Posté 29 Mars 2006 Posté 29 Mars 2006 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.
tonsite Posté 29 Mars 2006 Auteur Posté 29 Mars 2006 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éconnexionmysql_close($connexion);?> je voudrais y inclure cette fonction : <?phpfunction 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 Posté 29 Mars 2006 Posté 29 Mars 2006 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.
tonsite Posté 29 Mars 2006 Auteur Posté 29 Mars 2006 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
captain_torche Posté 29 Mars 2006 Posté 29 Mars 2006 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 Posté 29 Mars 2006 Auteur Posté 29 Mars 2006 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 ?
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant