Informations :
Dates
- Publish : : Friday 22 january 2021
- Modification : Friday 22 january 2021
- 6578 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'; // 30min
009/*
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).'';
014015
echo '<br/>'.$directoryTmp.$file;
016*/
017018
if( (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);
025026
if(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;
039040
for ($i=0; $i < count($lines[0]); $i++) {
041042
043
if($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;
050051
preg_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) {
058059
preg_match_all("/(.*)</td>/Ui", $lines[0][($line_report+1)], $title);
060061
$result['period']['value'] = trim($title[1][0]);
062063
$line_report = null;
064}
065066
if($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;
071072
preg_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
}
081082
if($line_stats !== null) {
083084
preg_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}
106107
108
//echo "[$i] {$lines[0][$i]}n";
109}
110111
112
113
if($find_log == true && isset($result) && is_array($result) && $year == date('Y') )
114awstats_resume_write($result, $year);
115116
}
117118
endif;
119120
return isset($result) ? $result : null;
121122
123
}
124125
126
}
127 128# Exemple pour voir le résultat
129//$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 Webwww.zw3b.frwww. .
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".'?>';
047048
if( 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);
005006
while(($file = @readdir($dirhandle)) !== false)
007{
008if (($file != '.') && ($file != '..') && (substr("$file", 0, 1) != '.'))
009{
010$currentfile = $directoryTmp.''.$file;
011$currentfilefake = '/'.$file;
012013
014
if (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]);
027028
return isset($result) ? $result : null;
029030
}
031 032# Affichage des stats pour toutes les années d'un site, d'une configuration
033//$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
$website
et$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 :