Dieses Programm entfernt Daten vor und nach einem definierbaren Termin aus den Text-Dateien der Statistik. Die bestehenden Dateien werden nur gelesen und nicht verändert. Als Ausgabe werden jeweils Dateien mit der Endung -n für neu und _l für zu löschende Informationen erzeugt. Falls diese Dateien nicht automatisch angelegt werden können, kommt eine entsprechende Fehlermeldung. Dann bitte manuell anlegen und mit chmod=0666 versehen.
Vor der Verarbeitung würde ich für den zu reorganisierenden Zeitraum ein/detallierte Archiv(e) erstellen.
Die Verarbeitung kann beliebig oft wiederholt werden. Für den endgültigen Lauf, sollte der Wartungsmodus aktiviert werden.
Das Ergebnis der Verarbeitung wird protokolliert. Bitte prüfen und dann ggf. die Dateien umbennen (später ggf. sichern und/oder lösen). Nach Cache und Index neu erstellen sollte die Statistik nur noch die aktuellen Daten aufweisen. Sonst sofort wieder die Original-Dateien zur Verfügung stellen.
Auch die Pattern-Dateien beinhalten nur noch die erforderlichen Daten. Die Schlüssel sind unverändert. Damit können ggf. die Daten aus den _l-Dateien später wieder zugefügt werden.
Es gibt folgende Verarbeitung steuernde Variablen, die auch als URL-Parameter übergeben werden können.
vts = Timestamp, ab dem die Daten erhalten bleiben sollen. Voreingestellt ist 0000000000
bts = Timestamp, bis zu dem die Daten erhalten bleiben sollen. Voreingestellt ist 9999999999
path = Pfad von der Installationsbibliothek des Programms zu den Dateien. Voreingestellt ist 'log/' für eine Installation in stat/.
Code:<?php
### letzte Änderung 24.02.11 09:25
### logdb- und pattern-Dateien reorganisieren
### http://www.php-web-statistik.de/cgi-bin/yabb/YaBB.pl?num=1298491675
### Timestamp umrechnen z.B. http://php.svenheidrich.de/timestamp.html
$vts=0000000000;
$bts=9999999999;
$path='log/';
if (isset($_REQUEST['vts'])) {$vts=$_REQUEST['vts'];}
if (isset($_REQUEST['bts'])) {$bts=$_REQUEST['bts'];}
if (isset($_REQUEST['path'])) {$path=$_REQUEST['path'];}
echo 'Timestamp: '.$vts.' - '.$bts.'<br>';
logdb($path.'logdb.dta');
logdb($path.'logdb_backup.dta');
pattern($br,$path.'pattern_browser.dta');
pattern($os,$path.'pattern_operating_system.dta');
pattern($rf,$path.'pattern_referer.dta');
pattern($rs,$path.'pattern_resolution.dta');
pattern($sn,$path.'pattern_site_name.dta');
echo '*end*<br>';
function logdb($file) {
global $vts,$bts,$br,$os,$rf,$rs,$sn;
$r=0;
$l=0;
$n=0;
$handle=fopen($file ,'r');
if (!$handle) {echo1($file);}
$handle_n=fopen($file.'_n','w');
if (!$handle_n) {echo1($file.'_n');}
$handle_l=fopen($file.'_l','w');
if (!$handle_l) {echo1($file.'_l');}
while (!feof($handle)) {
$buffer=fgets($handle,6000);
$a=explode('|',$buffer);
$r++;
if (($buffer!='')&&(count($a)==9)&&($a[0]>=$vts)&&($a[0]<=$bts)) {
$br[$a[2]]=true;
$os[$a[3]]=true;
$sn[$a[4]]=true;
$rf[$a[5]]=true;
$rs[$a[6]]=true;
fwrite($handle_n,$buffer);$n++;} else {fwrite($handle_l,$buffer);$l++;}}
fclose($handle);
fclose($handle_n);
fclose($handle_l);
echo2($file,$r,$n,$l);}
function pattern($x,$file) {
ksort($x);
$r=0;
$l=0;
$n=0;
$Y=false;
$handle=fopen($file ,'r');
if (!$handle) {echo1($file);}
$handle_n=fopen($file.'_n','w');
if (!$handle_n) {echo1($file.'_n');}
$handle_l=fopen($file.'_l','w');
if (!$handle_l) {echo1($file.'_l');}
while (!feof($handle)) {
$buffer=fgets($handle,6000);
$a=explode('|',$buffer);
$r++;
if ((count($a)==2)&&(isset($x[(int)$a[1]]))) {fwrite($handle_n,$buffer);$n++;$y=false;} else {fwrite($handle_l,$buffer);$l++;$y=@$a[1];}}
if ($y) {fwrite($handle_n,"\n|".$y+1);}
fclose($handle);
fclose($handle_n);
fclose($handle_l);
echo2($file,$r,$n,$l);}
function echo1($file) {echo 'Datei '.$file.' nicht gefunden'; exit;}
function echo2($file,$r,$n,$l) {echo 'Datei '.$file.' read:'.$r.' write_n:'.$n.' write_l:'.$l.'<br>';}
?>
Ich habe dieses Programm in meiner Umgebung mit 4.4.00 getestet und stelle es ohne Gewähr mit der Bitte um Feedback zur Verfügung.