Weitere Projekte auf AMBROSIA60

AMBROSIA60-Portal



Projekte und Success Storys
Einbindung BBClone in eine bestehende Website

BBClone: Site Counter and Analyzer 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   01531