Des robots remettent périodiquement mes stats à zéro

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Des robots remettent périodiquement mes stats à zéro

Re: Des robots remettent périodiquement mes stats à zéro

par Saian » 06 juil. 2024, 14:45

On regarde si le fichier existe (file_exists), si il existe on récupère son contenu (file_get_contents) qu'on désérialise (unserialize) et qui est sensé être un tableau avec les compteurs par page. S'il n'existe pas on créé un tableau vide ([]).
Ensuite on regarde si le compteur de la page existe (isset), s'il n'existe pas on l'initialise à 0.
Ensuite on incrémente le compteur de 1 (++), puis finalement on remplace le contenu du fichier (file_put_contents) en sérialisant (serialize) le tableau mis à jour.

Re: Des robots remettent périodiquement mes stats à zéro

par Rimpotche » 06 juil. 2024, 11:28

Merci beaucoup, Saian,
A première vue, je ne comprends pas grand chose, mais je vais faire des essais en ce sens...

Re: Des robots remettent périodiquement mes stats à zéro

par Saian » 03 juil. 2024, 13:40

Salut, le mode w vide le fichier je ne vois donc même pas comment vous pourriez avoir plus d'une ligne à la fois dans ce fichier.
'w' Ouvre en écriture seule ; place le pointeur de fichier au début du fichier et réduit la taille du fichier à 0. Si le fichier n'existe pas, on tente de le créer.

Sinon quitte à rechercher la ligne correspondant à la chanson pour incrémenter son compteur puis à insérer une nouvelle ligne pour cette même chanson alors qu'une ligne est déjà présente, il serait surement plus confortable d'utiliser un tableau et de le sérialiser.
$filepath = '../hitchansons.jac';
$hits = file_exists($filepath) ? unserialize(file_get_contents($filepath)) : [];

if (!isset($hits[$page])) {
    $hits[$page] = 0;
}

$hits[$page]++;
file_put_contents($filepath, serialize($hits));
Le fichier ne doit pas exister lors du premier appel de ce code pour éviter une erreur sur le unserialize.

Re: Des robots remettent périodiquement mes stats à zéro

par Rimpotche » 28 juin 2024, 20:16

Je suis passé aux oubliettes, on dirait...

Re: Des robots remettent périodiquement mes stats à zéro

par Rimpotche » 25 juin 2024, 08:46

CORRECTION. Merci au modérateur d'enlever mon précédent message. Désolé, mais je n'ai pas l'habitude des forums.

Code : Tout sélectionner

<!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta charset="utf-8" /> <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Chansons de Jac PETIT-JEAN-BORET</title> <style type="text/css"> </style> </head> <body id="chansonsbody" onload="init()"> <div id="listes"> <?php $categs['lhelp'] = '../audio/chansons3/listes-help.htm'; // // J'ai omis une longue série de listes pour alléger // if(!empty($_GET['page']) && array_key_exists($_GET['page'], $pages)) { $page = $_GET['page']; } include($pages[$page]); $filenamec = '../hitchansons.jac'; $handlec = fopen($filenamec, 'r'); $outbufferc = ''; $foundc = false; $hitsc = 1; // reading data from file while ( !feof( $handlec ) ) { $bufferc = trim( fgets( $handlec ) ); if ( strlen( $bufferc ) > 0 ) { list( $pagef, $countc, $title ) = explode( '|', $bufferc ); if ( !$foundc && $pagef == $page ) { $hitsc = $countc + 1; $outbufferc .= $page . '|' . $hitsc . '|' . $title . "\n"; $foundc = true; } else { $outbufferc .= $bufferc . "\n"; } } } fclose($handlec); if (!$foundc) { $outbufferc .= $page . "|1\n"; } // writing updated data to file $handlec = fopen($filenamec, 'w'); fwrite($handlec, $outbufferc); fclose($handlec); // hits counter end --------------------- ?> </div> </body> <script type="text/javascript"> function init() { element = document.body; return; }; </script> </html>

Re: Des robots remettent périodiquement mes stats à zéro

par or 1 » 24 juin 2024, 17:36

code html horrible mais nul part de trace de stats. c'est normal si c'est fait en php.
donc sans nous en dire plus, on ne peut pas vous aider.

Re: Des robots remettent périodiquement mes stats à zéro

par Rimpotche » 24 juin 2024, 17:07

Salut et merci pour la réponse. Au début, j'avais un fichier pour remettre à zéro en ligne. Mais quand le problème a commencé, je l'ai retiré et je resette depuis toujours à froid. La seule possibilité en ce cas, et pour mon niveau, c'est qu'un site ait gardé ce fichier. C'est un fichier texte qui est généré et il avait l'extension .txt. Je l'ai changé en extension .jac, qui ne doit pas être courante...

A propos de ton "tout dépend", j'ai laissé l'adresse du site dans mon premier message, donc si quelqu'un est assez compétent et aimable pour zyeuter mon code...

Merci pour le lien vers matomo, j'ai survolé et je retournerai étudier de plus près.

Re: Des robots remettent périodiquement mes stats à zéro

par @rthur » 24 juin 2024, 15:03

Bonjour,

Tout dépend de comment tu as réalisé ton compteur de stats.
Et notamment si tu as une fonction pour le remettre à zéro, car si c'est le cas, elle ne devrait pas être accessible publiquement et donc quand c'est fait dans les règles de l'art c'est totalement impossible qu'un robot puisse remettre à zéro des stats.

A noter qu'il existe un outil de stats gratuit que tu peux installer toi même qui s'appelle Matomo et qu'il est très complet :
https://fr.matomo.org/matomo-on-premise/

Des robots remettent périodiquement mes stats à zéro

par Rimpotche » 24 juin 2024, 08:02

Bonjour. J'écris des chansons que je mets sur mon site jpjb.eu.
Je suis nul en php, mais j'ai réussi en piquant des bouts de code à droite à gauche, à concocter une fonction de stats pour voir quelles chansons ont été écoutées (à la page d'accueil index.php). J'ai fait ça il y a trois ans, et ça marchait très bien au début, mais au fil du temps, j'ai des stats irréalistes, sans doute à cause des nombreux robots qui scannent tout. Je suppose qu'il n'y a aucune parade à ça, car je veux tout de même être référencé par Goût-gueule ou d'autres.

Mais mon problème est que de temps en temps (souvent dans la nuit du dimanche au lundi), ma page de stats est remise à zéro. Sans aller dans les détails pour l'instant, j'aimerais savoir si c'est un problème connu et s'il y a une parade à cela.

Merci d'avance et bonne journée. Rimpotche