Eindeutige Besucher in Piwik per API auslesen

Das Abfragen von eindeutigen Besuchern aus Piwik ist in der Grundeinstellung erst einmal deaktiviert. Zumindest wenn es um große Zeiträume wie Jahre oder ein bestimmtes Zeitfenster betrifft. Es braucht einfach zu viel Zeit, um die Daten abzufragen. Bei kleinen Seiten stellt dies sicherlich weniger ein Problem dar, bei großen Seiten, mit mehreren hunderten oder gar tausenden von Besuchern am Tag, ist dies natürlich wieder etwas anderes.

PiwikCounter ruft deshalb nur einmal, nämlich beim ersten Aufruf der Seite an einem Tag die Besucherdaten ab. Der Wert wird zwischengespeichert und nur noch mit der tagesaktuellen Anzahl an Besuchen oder eindeutigen Besuchern, je nach gewählter Option, dem Besucher präsentiert.

Um dies nun in Piwik zu aktivieren bedarf es einer kleinen Veränderung in der config.ini.php, welche im Verzeichnis config liegt. Dort muss im Block [General] folgender Eintrag hinzugefügt werden: "enable_processing_unique_visitors_year_and_range = 1". Jetzt sollte auch die Abfrage etwas anderes als 0 liefern.

In der derzeit aktuellen Version 0.1.1 von PiwikCounter sind die eindeutigen Besucher noch deaktiviert, in der nächsten wird sich dies aber ändern.

PiwikCounter veröffentlicht

Eine erste Version (0.1.1) ist nun über wordpress.org verfügbar. Derzeit funktionert leider die Internationalisierung noch nicht und auch eine Auflistung der eindeutigen Besucher ist noch nicht möglich. Letzteres scheint an Piwik selbst zu liegen, versuche aber, den Fehler zu finden und für die nächste Version zu beheben.

WordPress Plugin PiwikCounter

Derzeit arbeite ich an einem neuen Plugin für WordPress. Eine erste Version ist bereits hier im Blog aktiv und ruft für mein Blog die Anzahl der eindeutigen Besucher aus Piwik ab. Das fertige Plugin soll über das Administrationsmenü von WordPress verwaltet werden können. Hier legt man fest, auf welche Piwik-Installation das Plugin zugreifen soll. Ebenfalls hinterlegt werden ein Auth-Code um Zugriff auf die API zu haben, die Site-Id, welche die benötigte Seite identifiziert und das Datum, ab wann die Besucherzahlen abgerufen werden sollen.

Geplant ist, die Gesamtbesucherzahl bis zum Vortag abzurufen und dies nur einmal am Tag zu tun. Dieser Wert wird in der Datenbank gespeichert und mit dem Wert der Besucher des aktuellen Tages addiert. Dies geschieht aus dem Grund, weil die Abfrage eines größeren Zeitraumes auch immer mit mehr Aufwand in der Datenbank verbunden ist. Das Abfragen eines einzigen Tages, geht dagegen deutlich schneller, weshalb es bei der ersten Abfrage an einem Tag, zwei Abfragen gibt und später nur noch eine, da der erste Eintrag zwischengespeichert ist.

Ausgegeben wird das ganze dann in einem Widget, welches entweder die Gesamtbesucherzahl ausgibt, oder die Gesamtbesucherzahl und die Anzahl der Besucher des aktuellen Tages. Derzeit ist nur ersteres implementiert. Ein Termin für die Veröffentlichung steht noch nicht fest, aber es wird sicherlich das Plugin in absehbarer Zeit zum Download geben.

Permanente Weiterleitung per .htaccess

Aktuell plane ich den Umzug eines anderen Blogs von einer Domain zu einer anderen. Da man ja aber auch keine Besucher verlieren möchte, die nur die alten Links kennen, bietet sich ein permanenter Redirect an (Code 301). Bei einem Blog will man aber nicht anfangen und eine riesige Liste mit Einträgen schreiben. Es geht auch deutlich schneller mit Hilfe von regulären Ausdrücken und dem Apache-Modul mod_rewrite.

Nehmen wir an, unser Blog befindet sich auf der Domain olddomain.tld im Ordner blog, so würde der genaue Pfad wohl lauten www.olddomain.tld/blog/. Genau dort in dem Ordner muss nun eine .htaccess-Datei hinterlegt werden.Befindet sich das Blog nun im Wurzelverzeichnis (root) muss die .htaccess-Datei dorthin platziert werden.

Die .htacces-Datei muss folgenden Inhalt besitzt, wobei www.newdomain.tld eure eigene Domain beinhalten muss:

Options +FollowSymLinks
RewriteEngine on
RewriteRule ^(.*)$ http://www.newdomain.tld/$1 [R=301,L]

Jetzt werden alle Anfragen an www.olddomain.tld/blog/ an die Adresse www.newdomain.tld weitergeleitet.

Das Resultat wäre z.B. eine Weiterleitung der Anfrage www.olddomain.tld/blog/impressum auf die Seite www.newdomain.tld/impressum.

Wichtig ist auch, dass ihr die alte Domain noch eine Zeit lang weiter nutzen solltet. Ein halbes Jahr bis ein Jahr sollte es schon sein, damit auch jede Suchmaschine ihre Einträge anpassen kann.

Spielplan für eine Liga in PHP generieren

Nachdem ich seit geraumer Zeit schon auf der Suche nach einem Weg war um einen Spielplan zu generieren und die eigenen Versuche mit diversen Skizzen irgendwie nicht zum gewünschten Ergebnis geführt haben wurde ich schließlich im Internet fündig.

Auf der Internetseite http://www.x3m.ch wurde ich schließlich fündig. Andy Theiler hatte dort einen Algorithmus umgesetzt, welcher schnell und unkompliziert einen Spielplan generiert. Leider war es nicht möglich auch eine ungerade Zahl an Teams für die Berechnung zu verwenden.

Mit ein paar Veränderungen ist es nun möglich, auch z.B. einen Spielplan mit 5 Spielern zu generieren. In diesem Fall wird einfach in der Klasse die Anzahl der Teams um eins erhöht. Dadurch funktioniert die Berechnung. Da wir aber natürlich nur ein Team weniger haben, werden die Spiele, die mit dem zusätzlichen Team zusammenhängen aussortiert. Würde also bedeuten, dass pro Spieltag ein Team nicht dabei wäre. Im Endeffekt jedoch jeder einmal, bzw. mit Rückrunde zweimal, gegeneinander gespielt hat.

Im Anschluss befindet sich noch die in PHP programmierte Klasse zusammen mit meinen Ergänzungen. Wer das Original sucht, sollte hier einmal vorbei schauen.

Weiterlesen

pLANer für WordPress

Derzeit setzen wir im NetNight2000 Verein verstärkt auf WordPress. Um auch für kommende Veranstaltung mit WordPress arbeiten zu können wird derzeit eine kleine Variante von pLANer als WordPress-Plugin umgesetzt. Hierbei wird es erst einmal nur die grundlegenden Features die wir für pLANer angedacht haben in das Plugin implementiert. Dazu zählen was die Seitenbesucht betrifft natürlich ein Anmeldeformular. Auch eine Teilnehmerliste kann abgerufen werden.

Für die Admins gibt es dann noch ein paar weitere Details. Hier können die alle Daten der Benutzer angesehen und verändert werden, wenn dies nötig sein sollte. Auch das Löschen von Teilnehmern einer Veranstaltung ist schnell erledigt. Ganz wichtig ist auch die Auswahl der aktuellen LAN-Party und die Übersicht aller registrierter Clans.

Das ganze System greift auf die Tabellen von pLANer zurück. WordPress-Tabellen müssen sich deshalb in der gleichen Datenbank befinden, wie die übrigen pLANer-Tabellen.

Durch das Plugin können wir erst einmal WordPress für den Internetauftritt verwenden. Später kann man sich dann entscheiden, ob für das Web pLANer verwendet wird oder nicht. Im Intranet selbst soll jedoch nur pLANer während einer LAN eingesetzt werden.

Formulare in WordPress-Plugins per Session absichern

Es kommt vor, dass man Formulare durch eine zufällige Zeichenfolge vor erneutem Versenden schützen möchte. Um diesen Wert zu speichern, bietet sich die Session des aktuellen Benutzers an. Auch kann dadurch niemand mit einem selbstgebastelten Formular Daten übermitteln. Eine wichtige Schwachstelle wäre dadurch geschlossen.

Will man dies jedoch in einem WordPress-Plugin machen, steht man vor dem Problem, dass WordPress keine Sessions verwendet. Man könnte natürlich auch ein Cookie verwenden, aber nicht alle Besucher lassen Cookies zu. Die Session ist also unsere erste Wahl.

An sich ist das Ganze auch recht simpel. Es reicht, wenn man per add_action() bei ‚init‘ eine simple Funktion aufruft, die prüft, ob bereits eine Session besteht und wenn nicht, diese startet. Somit haben wir eine aktive Session in die wir einen Zufallswert speichern können.

Generieren wir nun unser Formular benötigen wir eine zufällige Zahl, besser sogar eine zufällige Zeichenfolge. Diese wird im Formular als verstecktes Feld eingebunden. Beim Empfang des Formulars wird dann geprüft, ob der Eintrag des Formulars mit der Session übereinstimmt. Als erstes sollte nun der Eintrag in der Session wieder gelöscht oder geleert werden.

Man ist jedoch damit nicht auf WordPress beschränkt, dies funktioniert natürlich überall in PHP wo mit Sessions gearbeitet wird. Zur Absicherung auf jeden Fall zu empfehlen.

pLANer – Alternative zu lansuite

Es war ja beim NetNight Verein immer wieder mal angedacht, eine Software zu schreiben um diverse kleinere und größere Tools zu vereinen. Halt eine Alternative zu schaffen, um lansuite abzulösen, welches auch bei manch einer unserer Veranstaltungen verwendet wurde. Doch ist mir lansuite ein Graus. Es ist einfach zu langsam und in der Bedienung viel zu umständlich. Auch findet sich nicht jeder direkt darin zurecht. Dagegen muss man etwas tun und werden wir etwas tun.

Aus OrgaWare wird nun pLANer. Dieses Projekt ist als OpenSource angelegt und steht unter der GPL v3. Basieren wird es auf PHP 5.3 und wird deshalb auch objektorientiert aufgebaut sein. Also keine stupiden prozedurale Programmierung mehr.

Wann eine erste Version verfügbar ist, kann noch nicht gesagt werden, befindet sich das Projekt doch noch mehr oder weniger im Planungsstadium. Wenn es mehr gibt, werde ich selbstverständlich darüber berichten. Sicher ist jetzt aber schon, es wird eine neue Software geben. Ob wir damit lansuite in die Schranken weisen können und endlich mal eine ordentliche Alternative bieten können, wird sich zeigen. Doch wir sind da Optimisten!

Galileo Press: PHP 5.3 & MySQL 5.1

Wer sich das im Titel genannte Buch gekauft hat, dem wird beim programmieren schnell auffallen, dass die Verwendung für Namespaces nicht wie beschrieben funktioniert. Die Ursache des Problems liegt jedoch nicht bei den Autoren des meines Erachtens nach herrvorragenden Buches, sondern daran, dass sich die Truppe hinter PHP dazu entschieden hat ein paar Dinge zu verändern.

Hätten wir vorher wie folgt programmiert:

namespace System::Test::Namensraum;

wird daraus nun folgender Code:

namespace System\Test\Namensraum;

Jetzt sollte das ganze wieder richtig funktionieren.

Natürlich stimmen deshalb die Quelltexte auf der CD des Buches nicht mehr. Eine aktualisierte Fassung kann man jedoch über die Internetseite phpundmysql.de beziehen.

XAMPP mit PHP 5.3 RC verwenden

Derzeit beschäftige ich mich ein wenig mit PHP 5.3, um ein wenig tiefer in die objektorientierte Programmierung in Webapplikationen einzusteigen. Mein Problem dabei war, wie bekomme ich am den Release Candidate von PHP 5.3 in meinem XAMPP ans laufen. Letztenendes erwies sich die ganze Angelegenheit als recht simpel.

  1. Stoppen des Apaches
  2. Herunterladen des aktuellen RCs von php.net (Variante: VC6 x86 Thread Save, ZIP)
  3. Sicherung von /apache und /php
  4. Überschreiben der Dateien im Ordner /php mit den Dateien aus dem RC
  5. Kopieren der .dll Dateien nach /apache/bin
    Wobei hier einfach darauf geachtet werden sollte, welche .dlls schon vorhanden sind und diese einfach ersetzt werden. Die restlichen .dlls werden dort nicht benötigt.
  6. Starten des Apache

Wenn jetzt alles geklappt hat, solltet ihr im Browser unter http://localhost/xampp/ eine Angabe zu PHP 5.3 finden, genauso unter phpinfo().