Un script qui s'execute plus d'une fois a chaque appel -> solution...

Un script qui s'execute plus d'une fois a chaque appel -> solution... - PHP - Programmation

Marsh Posté le 10-08-2005 à 16:21:41    

Bonjour
 
J'écris ce post car je me suis arraché les cheveux à chercher une cause à ce problème.
En effet, j'ai fait un compteur d'affichage de page, et je me suis rendu compte que a chaque fois que j'affichais une page, il y en avait entre 2 à 4 de comptées! J'ai tout testé, j'ai débuggé chaque ligne, j'ai viré tous les header(); Rien n'y faisait, un truc de fou! J'ai faillit me pendre! lol.
 
Et voici ce qui causait celà...
 
Sur mon site il y a des publicités google adsense, et il s'avere que mister google pour connaître le contenu de nos pages, bien évidemment, il les télécharge ! Donc à chaque refresh de page, Mr. Google re-télécharge la page appelée (pas terrible niveau économie de ressource remarquez :/).  
 
cf:  
 

http://services.google.com/feedback/abg?url=http:// www.votresite.com/page.html&hl=fr& [...] ww.eBay.be &adT=Jeux+sur+eBay&adU=www.lavacheautomatique.com &adT=Email+Original+%26amp%3B+sans+pub&adU= www.prizee.com&adT=Jeux+Gratuits+e [...] deaux&adU= www.nicoland.com&adT=Jeux+%C3%A9du [...] its&done=1


Contenu dans le script de google....
 
Donc pour éviter cela voici une petite fonction toute conne qui va vous permettre d'éviter que les pages appelées par google soit comptabilisées, ou tout autre traitement que vous ne souhaitez pas appliquer au passage de google.  
 

Code :
  1. <?php
  2.   function is_google_adsense_bot() {
  3.   if(strstr($_SERVER['HTTP_USER_AGENT'], 'Mediapartners-Google')) {
  4.    return true;
  5.      } else {
  6.    return false;
  7.   }
  8.   }
  9.   // Exemple :
  10.   if(is_google_adsense_bot()) {
  11.       // Ne rien faire
  12.   } else {
  13.       $x=$x+1;
  14.   }
  15. ?>


 
Un exemple d'économie de ressource serait de n'afficher que du texte sans les tags html lorsque c'est google adsense qui se connecte (a tester, je ne sais pas si ca peut nuire à l'affichage des pubs), et d'ignorer un tas d'autres traitements inutiles dans le cas google adsense! Biensur il faut quand même que google puisse savoir ce que contient les pages sinon y aurait plus de pubs d'affichées ;).
 
Pour la fonction si l'on veut savoir si c'est le googlebot qui visite les page il suffit de remplacer cette ligne par celle ci :  
 
ca :

Code :
  1. if(strstr($_SERVER['HTTP_USER_AGENT'], 'Mediapartners-Google')) {


 
par ca :

Code :
  1. if(strstr($_SERVER['HTTP_USER_AGENT'], 'Googlebot')) {


 
 
En espérant avoir rendu service.  :hello:  
Et si j'ai dit de's conneries dites le moi  :D  
 
Gat$


Message édité par Gat$ le 10-08-2005 à 16:26:33

---------------
Recherche de partenaires pvp dans World of Warcraft :: http://www.wowteamfinder.com
Reply

Marsh Posté le 10-08-2005 à 16:21:41   

Reply

Marsh Posté le 10-08-2005 à 16:51:49    

heu, moi je n'ai pas ca
 
j'ai du adsence sur un forum, pourtant j'ai beau ouvrir une page du forum, ca ne me comptabilise pas 2 lectures
 
et bien évidemment, dans les logs aucune trace de cela non plus.


---------------
Pour les sudistes :)
Reply

Marsh Posté le 10-08-2005 à 17:33:34    

e-deby a écrit :

heu, moi je n'ai pas ca
 
j'ai du adsence sur un forum, pourtant j'ai beau ouvrir une page du forum, ca ne me comptabilise pas 2 lectures
 
et bien évidemment, dans les logs aucune trace de cela non plus.


 
 
Laisse moi deviner il faut s'authentifier sur ton forum ? :)
 
De toute facon tu connais beaucoup d'explorateur internet qui mettent 'Mediapartners-Google' comme user-agent ? ;)


Message édité par Gat$ le 10-08-2005 à 17:34:42

---------------
Recherche de partenaires pvp dans World of Warcraft :: http://www.wowteamfinder.com
Reply

Marsh Posté le 10-08-2005 à 17:36:50    

Maintenant je ne sais pas comment google procède, peut-être qu'il ne se connecte pasa chaque fois. Je connais pas leur algorithme...
 
en tous cas moi c'est bien la cause de mon prob. A chaque affichage google télécharge la page que j'affiche. Et donc en execute le script, pour preuve, le user agent logué!
 

Mediapartners-Google/2.1
Mozilla/5.0 (Windows; U; Windows NT 5.1; fr-FR; rv:1.7.10) Gecko/20050717 Firefox/1.0.6
Mediapartners-Google/2.1
Mediapartners-Google/2.1
Mediapartners-Google/2.1
Mozilla/5.0 (Windows; U; Windows NT 5.1; fr-FR; rv:1.7.10) Gecko/20050717 Firefox/1.0.6
Mediapartners-Google/2.1
Mediapartners-Google/2.1
Mozilla/5.0 (Windows; U; Windows NT 5.1; fr-FR; rv:1.7.10) Gecko/20050717 Firefox/1.0.6
Mediapartners-Google/2.1
Mediapartners-Google/2.1
Mediapartners-Google/2.1
Mozilla/5.0 (Windows; U; Windows NT 5.1; fr-FR; rv:1.7.10) Gecko/20050717 Firefox/1.0.6
Mediapartners-Google/2.1
Mediapartners-Google/2.1
Mediapartners-Google/2.1


Message édité par Gat$ le 10-08-2005 à 17:38:19

---------------
Recherche de partenaires pvp dans World of Warcraft :: http://www.wowteamfinder.com
Reply

Marsh Posté le 03-05-2009 à 19:45:31    

Trop fort Google!
avec mes logs apaches je suis arrivé a la meme conclusion que toi , mais merci pour le ptit bout de code !
 
J'ai un script qui modifie ma base de donnée (modif mot de passe pour mes utilisateurs qui l'ont perdu) ... bin google le rappel aussi et j'ai donc un bon mail "Attention tentative de changement de mot de passe non autorisé" (une alarme à moi) à chaque fois.
Ta ptite bidouille résout bien le problème , maintenant c'est quand même vachement dangereux ce que fait google , il appel ma page avec les mêmes paramètres que je passe en get , déjà il les choppe ou !
Genre j'ai modif_mdp.php?temp_password=fezorhfeorher (recu par mail pour valider le changement de mail) et google rappel cette page systématiquement après un vrai appel utilisateur avec les même parametres (sauf que le mot de passe temporaire n'est plus valide d'ou l'erreur)....
 
Bizarre, j'aime pas trop ca ...

Reply

Marsh Posté le 04-05-2009 à 08:52:27    

snotsnot a écrit :

J'ai un script qui modifie ma base de donnée (modif mot de passe pour mes utilisateurs qui l'ont perdu) ... bin google le rappel aussi et j'ai donc un bon mail "Attention tentative de changement de mot de passe non autorisé" (une alarme à moi) à chaque fois.


C'est qu'il y a une grave erreur de conception :D
 
En HTTP, un script qui modifie une base de données, donc qui a des effets de bords, doit être appellé par la méthode POST, surtout pas par la méthode GET.
 
Un script appellé par la méthode GET doit pouvoir être appellé 10.000 fois sans problème, sans lancer d'alerte, il doit aussi pouvoir être mis en cache, être bookmarkable, pouvoir être envoyé par mail, etc. Si un des critère n'est pas respecté, c'est qu'il y a des effets de bords, et donc faut passer par POST.
 
Donc ton url modif_mdp.php?temp_password=fezorhfeorher doit conduire par exemple vers un formulaire (méthode POST) de confirmation finale du changement (aussi pour les utilisateurs qui se seraient trompés, c'est pas bien en cliquant sur un lien comme ça de balancer une action à effets de bords).

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed