für die, die das interessiert, hier eine kurze Erklärung, wie man AWStats sinnvoll mit Contenido einsetzen kann.
Die Anleitung bezieht sich auf Debian Sarge, müsste aber entsprechend auf jedem anderen Betriebsystem umsetzbar sein.
Voraussetzungen:
- Contenido
- Perl als CGI
- PHP auf der Kommandozeile mit CURL-Unterstützung für URL-Alias
- Kommandozeilenzugriff
Die beiden letzen Punkte sind nicht zwingend notwendig...
AWStats installieren
AWStats von http://awstats.sourceforge.net/ herunterladen und gemäss Anleitung installieren.
Unter Debian reicht auch
Code: Alles auswählen
apt-get install awstats
Sinnvolle Einstellungen in der /etc/awstats.conf:
Code: Alles auswählen
LogFormat=1
...
SiteDomain="www.example.com"
...
DNSLookup=1
...
# Ich habe hiermit interne Seiteanaufrufe (über das Gateway zur DMZ)
# ausgeblendet
SkipHosts="172.16.10.1"
...
# Nur Seiten meines Contenido Frontends (/cms) erfassen
OnlyFiles="REGEX[\/cms\/.(.*)$]"
...
# Wichtig ist, dass wir nicht nur /cms/front_content.php, sondern
# /cms/front_content.php?idcatart=123 erfassen, um die einzelnen Seiten
# unterscheiden zu können
URLWithQuery=1
...
# Slbiges für den Referrer
URLReferrerWithQuery=1
...
LoadPlugin="urlalias"
Nun müsste ein Aufruf von
Code: Alles auswählen
/usr/lib/cgi-bin/awstats.pl -update -config=awstats.conf
Ein Aufruf von http://www.example.com/cgi-bin/awstats.pl müsste die auch schon anzeigen. (Der Hostname kann natürlich ein anderer als der vom Frontend sein, siehe apache config).
Nun kann man awstats sinnvollerweise als cronjob laufen lassen, so dass z.B. einmal täglich die Statistik aktualisiert wird.
Hierfür legt man in /etc/cron.d eine Datei namens awstats mit dem folgenden Inhalt an:
Code: Alles auswählen
0 0 * * * root /usr/lib/cgi-bin/awstats.pl -update -config=awstats.conf > /dev/null
Code: Alles auswählen
man 5 crontab
Seitentitel in awstats anzeigen
Um nun in awstats nicht nur front_content.php?idcatart=123, sondern den vollen Titel zu sehen, hilft das Folgende:
Der Parameter
Code: Alles auswählen
LoadPlugin="urlalias"
Es gibt zwar in der Distribution von AWStats eine urlaliasbuilder.pl, die hat bei mir aber aus irgend einem Grund nicht funktioniert.
Daher habe ich etwas sehr einfaches in PHP gebaut:
Code: Alles auswählen
<?php
/******
* urlalias.php
*
* Creation of an urlalias-file for awstats from an awstats logfile.
* Schema: <webpath><tab><title>
* Mostly usable for a contenido site.
* The file content is written to stdout
*
* (c) Dirk Doerflinger, H2O GmbH proces water engineering
* <dirk.doerflinger@h2o-gmbh.com>
*
* Author: Dirk Doerflinger
* License: http://www.opensource.org/licenses/bsd-license.php
* Version: 1.0
*/
// ** EDIT THIS ***
// Where is the site running?
$site = "http://www.example.com";
// Where is the awstats file?
$input_file = "/var/lib/awstats/awstats032005.txt";
// How do we recognize our site, and our site only?
$recognizer = "/cms";
// *** END EDIT ***
$file = file( $input_file );
$started = FALSE;
$ended = FALSE;
$urllist = array();
foreach ( $file as $line ) {
// catch the begining of the URIs
if ( substr( $line, 0, 11 ) == "BEGIN_SIDER" )
$started = TRUE;
// catch the end of the URIs
if ( substr( $line, 0, 9 ) == "END_SIDER" )
$ended = TRUE;
if( $started && !$ended) {
// only our site...
if ( substr( $line, 0, strlen( $recognizer ) ) == $recognizer ) {
$arr = explode( ' ', $line );
$urllist[] = $site.$arr[0];
}
}
}
foreach( $urllist as $url ) {
$curl_handler = curl_init( $url );
curl_setopt ($curl_handler, CURLOPT_HEADER, 0);
curl_setopt ($curl_handler, CURLOPT_RETURNTRANSFER, 1);
$html = curl_exec ($curl_handler);
curl_close ($curl_handler);
// get everything right of the <title> tag
$con_a = split( "<title>", $html );
// get everything left of the </title> tag aka our title
$con_arr = split( "</title>", $con_a[1] );
echo substr( $url, strlen( $site ) )."\t".trim( htmlentities( $con_arr[0] ) ) ."\n";
}
?>
Es liest aus einer Statistikdatei die URLs, die AWStats gefunden hat, aus, holt sich von der jeweiligen Seite den Seitentitel und gibt Zeile für Zeile etwas wie
Code: Alles auswählen
/cms/front_content?idcatart=123 Seitentitel
Sie wird aufgerufen mit
Code: Alles auswählen
/usr/bin/php urlalias.php > /var/lib/awstats/urlalias.txt
Ich hoffe, ich habe nix vergessen, falls doch (oder auch sonst) wäre ich natürlich froh über Verbesserungsvorschläge...
Wie immer: ohne Garantie.
Viel Glück.
DD