LaoBlog

Awstats:Error Opening file GeoIP.dat....Can't call method "country_code_by_addr"


Prima di partire per le vacanze ho smanettato un po' con Awstats sul mio webserver con Debian Lenny. Le statistiche mi piacciono, ma ero interessato a saperne di più sui visitatori del mio sito web, così ho scoperto l'esistenza di un plugin che mi permette di risalire alla città del visitatore. Purtroppo, dopo aver configurato il percorso dei files contententi i dati relativi alle associazioni IP-località con Webmin, non so per quale motivo, ma il file GeoIP.dat non veniva più trovato dal file geoip.pm. Eppure quel file, che serve a risalire solamente alla nazione di provenienza del contatto, prima funzionava. Andando a leggere il file syslog, ho trovato che awstats dava il seguente errore:Error Opening file GeoIP.dat....Can't call method "country_code_by_addr" on an undefined value at /usr/share/awstats/plugins/geoip.pm line 96, <LOG> line 2Cercando sul web, ho scoperto che si tratta banalmente di un errore relativo al path del file GeoIP.dat. Quindi è bastato editare il file geoip.pm, individuare la linea contentente la variabile "$datafile" che indica il percorso del file GeoIP.dat, e modificare qualla linea da: if (! $datafile) { $datafile="GeoIP.dat"; }a if (! $datafile) { $datafile="/usr/share/GeoIP/GeoIP.dat"; }Rilanciato l'aggiornamento delle statistiche, il programma è ritornato a funzionare e ad indicare correttamente le nazioni di provenienza dei visitatori. Comunque io intendevo utilizzare anche il file GeoLiteCity.dat, per avere indicazioni riguardanti le città. Anche questo pareva non funzionare, ma controllando l'output del comando awstats.pl che serve ad aggiornare le statistiche, ho trovato un "error can't open file GeoLiteCity.day", il che significa che quel file non era dove il programma si aspettava che fosse. In pratica l'errore era lo stesso del precedente, il path del file .dat non era corretto. Editando quindi geoip_city_maxmind.pm, la linea contentenente la variabile "$datafile", è stata modificata in: if (! $datafile) { $datafile="/usr/share/GeoIP/GeoLiteCity.dat"; }Analogamente, se si fosse usato l'altro file .dat per le città disponibile (a pagamento), sarebbe bastato sostituire "GeoIPCity.dat" a "GeoLiteCity.dat"