Informations :
Dates
- Publish : : Friday 22 january 2021
- Modification : Friday 22 january 2021
- 11348 views
Download the file(s) :
Share :
J'ai écris un script PHP qui récupère quelques variables sur la page AWStats d'un site Web (les statistiques Web).
Le script est le suivant :
Récupère les variables principale déjà analysées, auditées grâce au script AWStats grâce à la fonction awstats_resume
Script avec 130 lignes
001function awstats_resume($website, $year, $month = null) {002003$month = isset($month) ? $month : 'all';004005$directoryTmp = '/var/pro/web_sites/lab3w_fr/admin/tmp/';006$file_year = $website.'-'.$year;007$file = 'awstats_'.$file_year.'.php';008$secondes = '1800'; // 30min009/*010echo '<br/>COURANT : '.mktime();011echo '<br/>MODIFIE : '.filemtime($directoryTmp.$file).'';012echo '<br/>LE CALCUL : '.((filemtime($directoryTmp.$file) + $secondes) - mktime()).'';013echo '<br/>A MODIF : '.(filemtime($directoryTmp.$file) + $secondes).'';014015echo '<br/>'.$directoryTmp.$file;016*/017018if( (filemtime($directoryTmp.$file) + $secondes) <= mktime()) {019//echo '<br/>'.'On reecrit le fichier';020021//exit;022023$url ='http://www.zw3b.fr/pub/AWStats/awstats.pl?framename=mainright&month='.$month.'&year='.$year.'&output=main&config='.$website.'';024$contents = file_get_contents($url);025026if(isset($contents) && !empty($contents)):027if(preg_match_all("/.{1,$s}(?=W+)/", $contents, $lines) !== false) {028029$result['config']['caption'] = 'Awstats';030$result['config']['value'] = $website;031032$find_log = false;033034$find_report = false;035$line_report = null;036037$find_stats = false;038$line_stats = null;039040for ($i=0; $i < count($lines[0]); $i++) {041042043if($find_report == false && preg_match("/Reported period/", $lines[0][$i], $matches)) {044//echo '<br/>LINE Reported period '.$i;045046$find_log = true;047048//$find_report = true;049$line_report = $i;050051preg_match_all("/(.*)</td>/Ui", $lines[0][$i], $period);052053$result['period']['caption'] = trim(str_replace(array('<tr bgcolor="#ECECEC">', '<td class="aws">'), ' ', $period[1][0]));054055}056 057if($line_report !== null) {058059preg_match_all("/(.*)</td>/Ui", $lines[0][($line_report+1)], $title);060061$result['period']['value'] = trim($title[1][0]);062063$line_report = null;064}065066if($find_stats == false && preg_match("/Unique visitors/", $lines[0][$i], $matches)) {067//echo '<br/>LINE STATS '.$i;068069$find_stats = true;070$line_stats = $i;071072preg_match_all("/<td(.*)>(.*)</td>/Ui", $lines[0][$i], $caption);073074$result['UV']['caption'] = trim($caption[2][1]);075$result['NV']['caption'] = trim($caption[2][2]);076$result['P']['caption'] = trim($caption[2][3]);077$result['H']['caption'] = trim($caption[2][4]);078$result['B']['caption'] = trim($caption[2][5]);079080}081082if($line_stats !== null) {083084preg_match_all("/<td(.*)>(.*)</td>/Ui", $lines[0][($line_stats+1)], $value);085086$pattern = array('<br />', '<b>', '</b>', ''', '<td>', '</td>', '<= ', 'Exact value not available in 'Year' view');087$replace = array(' ', '', '', ''', '', '', '', '');088089$value[0][1] = trim(str_replace($pattern, $replace, $value[0][1]));090$result['UV']['value'] = explode(' ', $value[0][1]);091092$value[0][2] = trim(str_replace($pattern, $replace, $value[0][2]));093$result['NV']['value'] = explode(' ', $value[0][2]);094095$value[0][3] = trim(str_replace($pattern, $replace, $value[0][3]));096$result['P']['value'] = explode(' ', $value[0][3]);097098$value[0][4] = trim(str_replace($pattern, $replace, $value[0][4]));099$result['H']['value'] = explode(' ', $value[0][4]);100101$value[0][5] = trim(str_replace($pattern, $replace, $value[0][5]));102$result['B']['value'] = explode(' ', $value[0][5]);103104$line_stats = null;105}106107108//echo "[$i] {$lines[0][$i]}n";109}110111112113if($find_log == true && isset($result) && is_array($result) && $year == date('Y') )114awstats_resume_write($result, $year);115116}117118endif;119120return isset($result) ? $result : null;121122123}124125126}127 128# Exemple pour voir le résultat129//$awstats = awstats_resume('www.zw3b.fr', '2021', $month = null);130
Cette function awstats_resume récupère des variables sur la page concernant tout les mois de l'année 2021 du site Web www.zw3b.fr.
L'URL est : AWSTtats/awstats.pl?framename=mainright&month=all&year=2021&output=main&config=www.zw3b.fr
Je récupère les variables : Unique visitors, Number of visits, Pages Views, Hits et Bandwidth.
En ligne , grâce à la fonction awstats_resume_write je stock les variables dans un fichier pour pouvoir les récupérer facilement (et surtout ne pas le faire si l'année est passée (n'est pas l'année courante).
Ecriture dans un fichier grâce à la fonction awstats_resume_write
Script avec 69 lignes
001function awstats_resume_write($result, $year = null) {002 003$year = isset($year) && !empty($year) ?$year : date('Y');004005$directoryTmp = '/var/pro/web_sites/lab3w_fr/admin/tmp/';006007$website = $result['config']['value'];008009$file_year = $result['config']['value'].'-'.$year;010 011//echo '<br/>Le fichier <code class="code">'.$directoryTmp.'awstats_'.$file_year.'.php</code>';012//if(!file_exists($directoryTmp.'awstats_'.$file_year.'.php'))013{014015$write = '<?php'."n";016017$write.= '/********************************************************************'."n";018$write.= ' *'."n";019$write.= ' * WebSite : '.$website.''."n";020$write.= ' * Description : Resume des Statistiques Annuelle (AWStats)'."n";021$write.= ' * File : awstats_'.$file_year.'.php'."n";022$write.= ' * Date : '.date('Y/m/d H:i:s')."n";023$write.= ' *'."n";024$write.= ' ************************************/'."nn";025026$write.= '// STATS -----------------------------------------------------------'."n";027$write.= '$result[''.$website.''][''.$year.'']['config']['caption'] = ''.$result['config']['caption'].'';'."n";028$write.= '$result[''.$website.''][''.$year.'']['config']['value'] = ''.$result['config']['value'].'';'."n";029030$write.= '$result[''.$website.''][''.$year.'']['period']['caption'] = ''.$result['period']['caption'].'';'."n";031$write.= '$result[''.$website.''][''.$year.'']['period']['value'] = ''.$result['period']['value'].'';'."n";032033$write.= '$result[''.$website.''][''.$year.'']['UV']['caption'] = ''.$result['UV']['caption'].'';'."n";034$write.= '$result[''.$website.''][''.$year.'']['UV']['value'] = '.var_export($result['UV']['value'],1).';'."n";035$write.= '$result[''.$website.''][''.$year.'']['NV']['caption'] = ''.$result['NV']['caption'].'';'."n";036$write.= '$result[''.$website.''][''.$year.'']['NV']['value'] = '.var_export($result['NV']['value'],1).';'."n";037$write.= '$result[''.$website.''][''.$year.'']['P']['caption'] = ''.$result['P']['caption'].'';'."n";038$write.= '$result[''.$website.''][''.$year.'']['P']['value'] = '.var_export($result['P']['value'],1).';'."n";039$write.= '$result[''.$website.''][''.$year.'']['H']['caption'] = ''.$result['H']['caption'].'';'."n";040$write.= '$result[''.$website.''][''.$year.'']['H']['value'] = '.var_export($result['H']['value'],1).';'."n";041$write.= '$result[''.$website.''][''.$year.'']['B']['caption'] = ''.$result['B']['caption'].'';'."n";042$write.= '$result[''.$website.''][''.$year.'']['B']['value'] = '.var_export($result['B']['value'],1).';'."n";043044$write.= '//------------------------------------------------------------------'."nn";045046$write.= "n".'?>';047048if( file_exists($directoryTmp.'awstats_'.$file_year.'.php') ) {049//echo ' existe ';050$fp = @fopen($directoryTmp.'awstats_'.$file_year.'.php', "w+");051} else {052//echo ' n'existe pas ';053//echo ' --→ on le cree (true)';054$fp = @fopen($directoryTmp.'awstats_'.$file_year.'.php', "x+");055}056057//echo ' --→ on ecrit';058//echo fputs($fp, $write) ? ' (true)<br/>' : ' (false)<br/>';059060@fputs($fp, $write);061062@fclose($fp);063064@chmod($directoryTmp.'awstats_'.$file_year.'.php', octdec("664")); //exit;065@chgrp($directoryTmp.'awstats_'.$file_year.'.php', "1000"); //exit;066067}068069}
La fonction awstats_resume_write écrit tout simplement un fichier dans un répertoire définit, ici /var/pro/web_sites/lab3w_fr/admin/tmp/.
Lecture du fichier en comptabilisant
Script avec 34 lignes
001function awstats_resume_read_file($website) {002003$directoryTmp = '/var/pro/web_sites/lab3w_fr/admin/tmp/';004$dirhandle = opendir($directoryTmp);005006while(($file = @readdir($dirhandle)) !== false)007{008if (($file != '.') && ($file != '..') && (substr("$file", 0, 1) != '.'))009{010$currentfile = $directoryTmp.''.$file;011$currentfilefake = '/'.$file;012013014if (filetype($currentfile) != 'dir' && preg_match("/awstats_".$website."/Ui", $currentfile, $match))015{016include ''.$currentfile;017018//echo $currentfile.'<br/>';019}020021}022023}024 025asort($result[$website], SORT_REGULAR);026krsort($result[$website]);027028return isset($result) ? $result : null;029030}031 032# Affichage des stats pour toutes les années d'un site, d'une configuration033//$awstats = awstats_resume_read_file('www.zw3b.fr');034//echo '<code class="code">'.print_r($awstats,1).'</code>';
La fonction awstats_resume_read_file, retourne un tableau PHP (array) avec les variables classées par années.
J'ai fais une page AWStats ici, qui peut vous donnez un exemple de ce que cela peut représenter au final :)
Note de Moi-même du 20220214 : Je vous envoie mon script PHP Source - c'est plus simple - et tout fait :) (script à l'arache)..
- Il n'y a que la variable
$websiteet$directoryTmpà changer me s'emble t'il :)
Le plus important est de fermer vos pages AWStats.pl ou plutôt de limiter à votre IP personnelle.
Il ne faut surtout pas afficher les statistiques au public dont l'adresse IP des internautes - pour les lois du RGPD Règlement général sur la protection des données Européenne.
Sur WebRankInfo un sujet flipant : En prison pour avoir utilisé Google Analytics !!!
Pour essayer d'apporter des solutions aux internautes qui fréquentent WebRankInfo, Olivier Duffez a publié ce matin une liste d'outils de web analytics compatibles RGPD, sans cookies ou sans consentement nécessaire. Autres que Google Analytics, vous l'aurez compris, Olivier Duffez nous signale ;)
Note de Moi-même du 20220212 - TODO :
Il faudrait faire un script qui récupère les variables directement dans les fichiers type /var/lib/awstats/awstats022022.www.domain.tld.txt
Cordialement,
Romain
Liens Web :


