BBClone - A PHP based Web Counter on Steroids (Externer Link!) Bei der Einbindung von Webcounters und Analyse Tools zum Monitoring der Website bin ich über BBClone gestolpert. Seit Dez. 2004 ist es bei mir im Einsatz. |
|
Nachdem die Einbindung der Website bereits seit über einem halben Jahr am Laufen ist, ist mir heute bei der
genaueren Analyse der Ergebnisse aufgefallen, dass bislang nur Seiten in der detailierten Statistik aufgeführt
wurden, die im Web-Root Verzeichnis liegen.
Seiten die in einem Subdirectory liegen tauchten in der Statistik nicht auf, obwohl im Vergleich zum Webserver Log
Seiten wissentlich aufgerufen wurden und in der Statistik hätten auftauchen müssen.
Zünächst ein wenig Hintergrund Informationen:
BBClone ist in PHP geschrieben und wird als PHP Script aufgerufen.
Der Aufruf kann in jede Seite mit folgendem Codeschnipsel erfolgen:
define("_BBC_PAGE_NAME", "[filename]"); define("_BBCLONE_DIR", "clone/"); define("COUNTER", _BBCLONE_DIR."mark_page.php"); if (is_readable(COUNTER)) include_once(COUNTER);
Wenn man nun diesen Codeschnipsel in ein Include File packt, das von jeder Webseite aufgerufen wird, benötigt man nur einen einziges mal den Aufruf. Hier muss dann allerdings der aufrufende [Filename] ermittelt werden.
$sname = $_SERVER["SCRIPT_NAME"]; $file = basename($sname); define("_BBC_PAGE_NAME", $file); define("_BBCLONE_DIR", "clone/"); define("COUNTER", _BBCLONE_DIR."mark_page.php"); if (is_readable(COUNTER)) include_once(COUNTER);
Wie ich jetzt feststellen musste, funktioniert die Zeile
define("_BBCLONE_DIR", "clone/");
nur bei Aufrufen aus dem Root Verzeichnis.
Ok, setze ich das Verzeichnis auf absolutes Verzeichnis "/clone/"
Wie aber auch das mitgelieferte FAQs.txt schon schreibt:
- The directory you specified in your inclusion doesn't contain a trailing slash. This, however, is necessary for getting a valid path to the counter.
funktioniert das nicht, weil BBClone nur mit relativen Pfaden arbeitet.
Daher hier ein Workaround:
$sname = $_SERVER["SCRIPT_NAME"]; $file = basename($sname); // Ermittlung des Scriptnamens $dname = dirname($sname); // Ermittlung des Script Paths define("_BBC_PAGE_NAME", $file); // Wenn Scipt in Subdir if ($dname=="\\") { // dann Ergebnis = /subdir/ define("_BBCLONE_DIR", "clone/"); // andernfalls Ergebnis = \ } else { define("_BBCLONE_DIR", "../clone/"); } define("COUNTER", _BBCLONE_DIR."mark_page.php"); if (is_readable(COUNTER)) include_once(COUNTER);
Die Unterscheidung zwischen Root Verzeichnis "\" und Subdirs "/subdir/"
ist hierbei ein Anfang .... Jetzt könnte man noch weiter die Anzahl der Unterverzeichnisse
ermitteln, um die Anzahl der Backsteps "../" zu generieren ....
Hier noch einmal der komplette Codeschnipsel:
<?php $sname = $_SERVER["SCRIPT_NAME"]; $file = basename($sname); // lese filename aus $dname = dirname($sname); // lese aktuellen path aus define("_BBC_PAGE_NAME", $file); if ($dname=="\\") { define("_BBCLONE_DIR", "clone/"); // aufruf aus root path } else { $dstr = str_repeat("../",substr_count($dname, "/"))."clone/"; define("_BBCLONE_DIR", $dstr); // aufruf aus subdir } // benutze anzahl ../ define("COUNTER", _BBCLONE_DIR."mark_page.php"); if (is_readable(COUNTER)) include_once(COUNTER); ?>
© 2003-2024 by Ulrich Schroeter | 02297 |