Achja, ein kleines aber nettes Detail habe ich noch eingebaut.
Wenn man im Adminbereich auf die Spaltenüberschriften klickt, wird die Ansicht abwechselnd auf- oder absteigend nach dieser Spalte sortiert.![]()
Hallo TPler,
als Foren- und Webseitenbetreiber interessiert es einen Admin doch sehr, woher seine Besucher kommen und wer auf die eigene Webseite verlinkt.
Zwar gibt es dafür Auswertungsmöglichkeiten über diverse Programme, die die Logfiles auswerten, jedoch vermisste ich dabei eine übersichtliche Darstellung.
Also habe ich es mir selbst gemacht.![]()
Mein Script wertet den übergebenen Referer aus und speichert die wichtigsten Daten in einer MySQL-Datenbank ab. Über einen Adminbereich kann man sich die Referer sehr übersichtlich nach Domain, Anzahl der Klicks und letztem Zugriff sortiert für einen auswählbaren Monat anzeigen lassen (siehe Anhang1 - counter1.gif).
Dabei werden neue Einträge in einer anderen Farbe hervorgehoben und am Anfang der Liste angezeigt. So hat man immer eine schnelle Übersicht und sieht sofort, welche Referer neu hinzugekommen sind.
Der Vorteil meines Scripts liegt darin, dass die Referer nach Domain gruppiert werden. Klickt man nun auf einen Domainnamen, so öffnet sich ein zweites Fenster, in welchem nun alle Unterseiten, die von dieser Domain auf die eigene Webseite verlinken, aufgelistet werden (siehe Anhang 2 - counter2.gif).
Auch hier werden neue Einträge farblich hervorgehoben. Klickt man auf einen Eintrag, so gelangt man direkt zu der Webseite, welche verlinkt hat. Zusätzlich wird die farbliche Markierung nun aufgehoben. So kann man die Liste einfach "abarbeiten".
Die Technik:
es liegt eine kurze ReadMe-Datei bei, welche die Installation erklärt.
Das Script enthält eine Klasse, welche auf den Seiten eingebunden werden muss, die die Referer mitloggen sollen.
Über Parameter in der "functions.php" kann man bestimmte Domains blocken (127.0.0.1, localhost, usw ...). Ferner kann man Teile des GET-Strings ignorieren lassen ('sid=','session=','phpsessid=','highlight=', usw...), damit die Einzelseiten korrekt gruppiert werden (der wirkliche Referer wird dabei nicht verändert).
Als Extra-Bonbon wird bei einem Refererklick von Google der Suchstring extrahiert. Schaut man sich die Refererliste für Google an, so hat man schön nach Häufigkeit sortiert eine Liste der Suchbegriffe, die die User bei Google tatsächlich eingegeben haben. Diese Liste kann man dazu nutzen seine Webseite hinsichtlich Suchbegriffe weiter zu optimieren.
Abschließend bleibt zu sagen, dass der Referer nicht zwangsläufig vom Browser übermittelt werden muss. Er kann auch durch eine Firewall geblockt werden. Nichtsdestotrotz liefert einem das Script einen sehr guten Überblick darüber, wer auf die eigene Webseite verlinkt.
Ich selbst nutze es für das Projekt www.mysqldumper.de . Jeden Tag bin ich mindestens einmal im Adminbereich und bin jedes Mal aus Neue gespannt, welche neuen Einträge es gibt. Auf diese Weise bin ich schon in viele Foren gekommen, zu denen ich sonst nie gelangt wäre.
Probiert das Script aus und gebt hier gerne Feedback.
Verbesserungen sind natürlich jederzeit willkommen.
Viel Spaß bei der Herkunftsermittlung Deiner User.![]()
Geändert von DSB (11.09.2005 um 12:14 Uhr)
Achja, ein kleines aber nettes Detail habe ich noch eingebaut.
Wenn man im Adminbereich auf die Spaltenüberschriften klickt, wird die Ansicht abwechselnd auf- oder absteigend nach dieser Spalte sortiert.![]()
Hm, ich muss sagen, dass ich ein wenig enttäuscht bin.
Sicherlich habe ich nicht mit 3456 Postings als Antwort gerechnet aber das jetzt gar nichts passiert und sich so gut wie niemand dafür interessiert erstaunt mich doch sehr.
Finde nur ich es interessant wie die User zu meiner Seite finden und von welcher Seiten auf mich verlinkt wird?
Hm, hab in letzter Zeit nicht so gründlich die neuen Topics durchgeschaut, habs erst jetzt gesehen. Werde es morgen gleich mal in meine Seite einbauen un testen
Screenshots & Funktionsbeschreibung sieht schonmal vielversprechend aus
"Dieses Business ist binär. Du bist eine Eins oder eine Null, lebendig oder tot. Es gibt keinen zweiten Sieger." - Gary Winston (StartUp)
Hmm, weiß nicht. Vielleicht liegt es aber auch daran, daß die meisten Provider -sofern man keinen eigenen Server betreibt- ohnehin ausführliche Statistiken inklusive anbieten, die Zugriffe, Referer usw detailliert anzeigen.Zitat von DSB
Hi, habs jetzt schon 'ne weile laufen und find das echt gut und praktisch da ich hier genau die Sachen bekomme die ich wissen will ohne die kompletten Logs zu durchforsten was mir schon einiges an Zeit spart.![]()
"Dieses Business ist binär. Du bist eine Eins oder eine Null, lebendig oder tot. Es gibt keinen zweiten Sieger." - Gary Winston (StartUp)
Juchhee - ein Stück Zuspruch!
Danke jow.![]()
Danke für Dein Feedback.
Dann hat es ja doch noch einen Sinn gehabt, dass ich das veröffentlicht habe.
Jetzt gehts mir besser. *g*
Schön, dass ich dein Gemüt erhellen konnte![]()
![]()
"Dieses Business ist binär. Du bist eine Eins oder eine Null, lebendig oder tot. Es gibt keinen zweiten Sieger." - Gary Winston (StartUp)
hi habe den beitrag im google gefunden und wollte den referer gleich in meine hp einbauen. hat eigentlich alles gut funktioniert. doch wird nichts mitgeloggt.
habs mal auf meiner testseite und datenbank installiert
http://philson2.ph.funpic.de/referer/admin/
http://philson2.ph.funpic.de/wbb
und hier die index.php
was hab ich falsch gemacht? kann mir wer helfen thxCode:<style type="text/css"> <!-- body { margin-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; } include("http://philson2.ph.funpic.de/referer/functions.php"); $visitor=new visitor(); $visitor->set(); --> </style><?php $filename="index.php"; require("./global.php"); if(isset($_COOKIE['boardvisit'])) $boardvisit=decode_cookie($_COOKIE['boardvisit']); else $boardvisit=array(); if(isset($_COOKIE['threadvisit'])) $threadvisit=decode_cookie($_COOKIE['threadvisit']); else $threadvisit=array(); $boardcache=array(); $permissioncache=array(); $modcache=array(); $activtime=time()-60*$useronlinetimeout; $users_out = $db->query("SELECT * FROM bb".$n."_useronline WHERE zeit<'$activtime' AND userid<>'0'"); while($user_out = $db->fetch_array($users_out)){ $onlinetime=$user_out[zeit]-$user_out[logintime]; $db->query("UPDATE bb".$n."_users SET onlinetime=onlinetime+$onlinetime WHERE userid='$user_out[userid]'"); } $db->query("DELETE FROM bb".$n."_useronline WHERE zeit<'$activtime'"); if($wbbuserdata[userid] !=0) { $anzahl = $db->query_first("SELECT COUNT(zeit)as anzahl FROM bb".$n."_useronline WHERE userid='$wbbuserdata[userid]'"); if($anzahl[anzahl]) $db->query("UPDATE bb".$n."_useronline SET zeit='".time()."' WHERE userid='$wbbuserdata[userid]'"); else $db->query("INSERT INTO bb".$n."_useronline VALUES ('".time()."','$wbbuserdata[userid]','".time()."')"); } $result = $db->query(" SELECT b.*".ifelse($showlastposttitle==1,", t.topic, i.*")." FROM bb".$n."_boards b ".ifelse($showlastposttitle==1,"LEFT JOIN bb".$n."_threads t ON (t.threadid=b.lastthreadid) LEFT JOIN bb".$n."_icons i USING (iconid)")." ORDER by b.parentid ASC, b.boardorder ASC"); while ($row = $db->fetch_array($result)) $boardcache[$row['parentid']][$row['boardorder']][$row['boardid']] = $row; $result = $db->query("SELECT boardid, threadid, lastposttime FROM bb".$n."_threads WHERE visible = 1 AND lastposttime > '$wbbuserdata[lastvisit]' AND closed <> 3"); while($row=$db->fetch_array($result)) $visitcache[$row['boardid']][$row['threadid']]=$row['lastposttime']; $result = $db->query("SELECT * FROM bb".$n."_permissions WHERE groupid = '$wbbuserdata[groupid]'"); while ($row = $db->fetch_array($result)) $permissioncache[$row['boardid']] = $row; $result = $db->query("SELECT bb".$n."_moderators.*, username FROM bb".$n."_moderators LEFT JOIN bb".$n."_users USING (userid) ORDER BY username ASC"); while ($row = $db->fetch_array($result)) $modcache[$row['boardid']][] = $row; $boardbit = makeboardbit(0); $index_pms=""; $quicklogin=""; $index_useronline=""; $index_stats=""; /* ############## STATS ############## */ if($showstats==1) { $members=$db->query_first("SELECT COUNT(*) AS members, MAX(userid) AS userid FROM bb".$n."_users WHERE activation = 1"); $newestmember=$db->query_first("SELECT userid, username FROM bb".$n."_users WHERE userid = '$members[userid]'"); $posts=$db->query_first("SELECT COUNT(*) AS posts FROM bb".$n."_posts"); $threads=$db->query_first("SELECT COUNT(*) AS threads FROM bb".$n."_threads"); $installdays = (time() - $installdate) / 86400; if ($installdays < 1) $postperday = $posts['posts']; else $postperday = sprintf("%.2f",($posts['posts'] / $installdays)); eval ("\$index_stats = \"".$tpl->get("index_stats")."\";"); } if($wbbuserdata['canuseacp']==1) { $abwesend_res = $db->query_first("SELECT count(userid) FROM bb".$n."_users WHERE abwesend='1'"); $abwesend_user = $abwesend_res[0]; $abwesend_res = $db->query_first("SELECT count(userid) FROM bb".$n."_users WHERE abwesend='1' AND abwesend_timer2<='".time()."'"); $abwesend_user1 = $abwesend_res[0]; eval ("\$abwesend = \"".$tpl->get("main_abwesendstat")."\";"); } /* ############## USERONLINE ############## */ if($showuseronline==1) { $guestcount=0; $membercount=0; $useronlinebit = ''; $result = $db->query("SELECT bb".$n."_sessions.userid, username, groupid, invisible FROM bb".$n."_sessions LEFT JOIN bb".$n."_users USING (userid) WHERE bb".$n."_sessions.lastactivity >= '".(time()-60*$useronlinetimeout)."' ORDER BY username ASC"); while($row = $db->fetch_array($result)) { if($row['userid']==0) { $guestcount++; continue; } $membercount++; if(!$row['invisible']) { if(isset($useronlinebit) && $useronlinebit != '') $useronlinebit .= ', '; eval ("\$useronlinebit .= \"".$tpl->get("index_useronline")."\";"); } } $totaluseronline = $membercount+$guestcount; $wwd_useron = $db->query_first("SELECT COUNT(*) FROM bb".$n."_sessions_day"); $wwd_useron = $wwd_useron[0]; $result=$db->query("SELECT d.userid, d.time,u.* FROM bb".$n."_sessions_day d LEFT JOIN bb".$n."_users u USING(userid)"); while($wwd=$db->fetch_array($result)) { $wwd['time'] = formatdate($timeformat,$wwd['time']); $werwarda1++; $ghost = ""; if($wwd['invisible']){ if($wbbuserdata['canuseacp'] == 1) { $ghost = " (Geist)"; eval ("\$werwarda .= \"".$tpl->get("index_wwhd")."\";"); }else{ $ghost = ""; continue; } }else eval ("\$werwarda .= \"".$tpl->get("index_wwhd")."\";"); } if($totaluseronline>$rekord) { $rekord=$totaluseronline; $rekordtime=time(); $db->unbuffered_query("UPDATE bb".$n."_options SET value='$rekord' WHERE varname='rekord'",1); $db->unbuffered_query("UPDATE bb".$n."_options SET value='$rekordtime' WHERE varname='rekordtime'",1); require ("./acp/lib/class_options.php"); $option=new options("acp/lib"); $option->write(); } $rekorddate = formatdate($dateformat,$rekordtime); $rekordtime = formatdate($timeformat,$rekordtime); eval ("\$index_useronline = \"".$tpl->get("index_showuseronline")."\";"); } if(!$wbbuserdata['userid']) { eval ("\$welcome = \"".$tpl->get("index_welcome")."\";"); eval ("\$quicklogin = \"".$tpl->get("index_quicklogin")."\";"); } else { $currenttime=formatdate($timeformat,time()); $toffset=ifelse($default_timezoneoffset>=0,"+").$default_timezoneoffset; $lastvisitdate = formatdate($dateformat,$wbbuserdata['lastvisit']); $lastvisittime = formatdate($timeformat,$wbbuserdata['lastvisit']); eval ("\$welcome = \"".$tpl->get("index_hello")."\";"); if($wbbuserdata['canusepms']==1 && $showpmonindex==1) { $counttotal=0; $countunread=0; $countnew=0; $result = $db->query("SELECT view, sendtime FROM bb".$n."_privatemessage WHERE deletepm <> 1 AND recipientid = '$wbbuserdata[userid]'"); while($row=$db->fetch_array($result)) { $counttotal++; if($row['view']==0) { $countunread++; if($row['sendtime']>$wbbuserdata['lastvisit']) $countnew++; } } if($countnew>0) eval ("\$new_notnew = \"".$tpl->get("index_newpm")."\";"); else eval ("\$new_notnew = \"".$tpl->get("index_nonewpm")."\";"); eval ("\$index_pms = \"".$tpl->get("index_pms")."\";"); } } eval("\$tpl->output(\"".$tpl->get("index")."\");"); ?>
lol - Du führst den PHP-Teil ja auch nicht aus. Der steht so im Quelltext.
Mach mal um
die PHP-Tags drumrum.Code:include("http://philson2.ph.funpic.de/referer/functions.php"); $visitor=new visitor(); $visitor->set();
Code:<?php include("http://philson2.ph.funpic.de/referer/functions.php"); $visitor=new visitor(); $visitor->set(); ?>
k thx
habs eingefügt
bekomm aber jetzt ganz unten ne fehlermeldung
Code:<style type="text/css"> <!-- body { margin-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; } --> </style><?php $filename="index.php"; require("./global.php"); if(isset($_COOKIE['boardvisit'])) $boardvisit=decode_cookie($_COOKIE['boardvisit']); else $boardvisit=array(); if(isset($_COOKIE['threadvisit'])) $threadvisit=decode_cookie($_COOKIE['threadvisit']); else $threadvisit=array(); $boardcache=array(); $permissioncache=array(); $modcache=array(); $activtime=time()-60*$useronlinetimeout; $users_out = $db->query("SELECT * FROM bb".$n."_useronline WHERE zeit<'$activtime' AND userid<>'0'"); while($user_out = $db->fetch_array($users_out)){ $onlinetime=$user_out[zeit]-$user_out[logintime]; $db->query("UPDATE bb".$n."_users SET onlinetime=onlinetime+$onlinetime WHERE userid='$user_out[userid]'"); } $db->query("DELETE FROM bb".$n."_useronline WHERE zeit<'$activtime'"); if($wbbuserdata[userid] !=0) { $anzahl = $db->query_first("SELECT COUNT(zeit)as anzahl FROM bb".$n."_useronline WHERE userid='$wbbuserdata[userid]'"); if($anzahl[anzahl]) $db->query("UPDATE bb".$n."_useronline SET zeit='".time()."' WHERE userid='$wbbuserdata[userid]'"); else $db->query("INSERT INTO bb".$n."_useronline VALUES ('".time()."','$wbbuserdata[userid]','".time()."')"); } $result = $db->query(" SELECT b.*".ifelse($showlastposttitle==1,", t.topic, i.*")." FROM bb".$n."_boards b ".ifelse($showlastposttitle==1,"LEFT JOIN bb".$n."_threads t ON (t.threadid=b.lastthreadid) LEFT JOIN bb".$n."_icons i USING (iconid)")." ORDER by b.parentid ASC, b.boardorder ASC"); while ($row = $db->fetch_array($result)) $boardcache[$row['parentid']][$row['boardorder']][$row['boardid']] = $row; $result = $db->query("SELECT boardid, threadid, lastposttime FROM bb".$n."_threads WHERE visible = 1 AND lastposttime > '$wbbuserdata[lastvisit]' AND closed <> 3"); while($row=$db->fetch_array($result)) $visitcache[$row['boardid']][$row['threadid']]=$row['lastposttime']; $result = $db->query("SELECT * FROM bb".$n."_permissions WHERE groupid = '$wbbuserdata[groupid]'"); while ($row = $db->fetch_array($result)) $permissioncache[$row['boardid']] = $row; $result = $db->query("SELECT bb".$n."_moderators.*, username FROM bb".$n."_moderators LEFT JOIN bb".$n."_users USING (userid) ORDER BY username ASC"); while ($row = $db->fetch_array($result)) $modcache[$row['boardid']][] = $row; $boardbit = makeboardbit(0); $index_pms=""; $quicklogin=""; $index_useronline=""; $index_stats=""; /* ############## STATS ############## */ if($showstats==1) { $members=$db->query_first("SELECT COUNT(*) AS members, MAX(userid) AS userid FROM bb".$n."_users WHERE activation = 1"); $newestmember=$db->query_first("SELECT userid, username FROM bb".$n."_users WHERE userid = '$members[userid]'"); $posts=$db->query_first("SELECT COUNT(*) AS posts FROM bb".$n."_posts"); $threads=$db->query_first("SELECT COUNT(*) AS threads FROM bb".$n."_threads"); $installdays = (time() - $installdate) / 86400; if ($installdays < 1) $postperday = $posts['posts']; else $postperday = sprintf("%.2f",($posts['posts'] / $installdays)); eval ("\$index_stats = \"".$tpl->get("index_stats")."\";"); } if($wbbuserdata['canuseacp']==1) { $abwesend_res = $db->query_first("SELECT count(userid) FROM bb".$n."_users WHERE abwesend='1'"); $abwesend_user = $abwesend_res[0]; $abwesend_res = $db->query_first("SELECT count(userid) FROM bb".$n."_users WHERE abwesend='1' AND abwesend_timer2<='".time()."'"); $abwesend_user1 = $abwesend_res[0]; eval ("\$abwesend = \"".$tpl->get("main_abwesendstat")."\";"); } /* ############## USERONLINE ############## */ if($showuseronline==1) { $guestcount=0; $membercount=0; $useronlinebit = ''; $result = $db->query("SELECT bb".$n."_sessions.userid, username, groupid, invisible FROM bb".$n."_sessions LEFT JOIN bb".$n."_users USING (userid) WHERE bb".$n."_sessions.lastactivity >= '".(time()-60*$useronlinetimeout)."' ORDER BY username ASC"); while($row = $db->fetch_array($result)) { if($row['userid']==0) { $guestcount++; continue; } $membercount++; if(!$row['invisible']) { if(isset($useronlinebit) && $useronlinebit != '') $useronlinebit .= ', '; eval ("\$useronlinebit .= \"".$tpl->get("index_useronline")."\";"); } } $totaluseronline = $membercount+$guestcount; $wwd_useron = $db->query_first("SELECT COUNT(*) FROM bb".$n."_sessions_day"); $wwd_useron = $wwd_useron[0]; $result=$db->query("SELECT d.userid, d.time,u.* FROM bb".$n."_sessions_day d LEFT JOIN bb".$n."_users u USING(userid)"); while($wwd=$db->fetch_array($result)) { $wwd['time'] = formatdate($timeformat,$wwd['time']); $werwarda1++; $ghost = ""; if($wwd['invisible']){ if($wbbuserdata['canuseacp'] == 1) { $ghost = " (Geist)"; eval ("\$werwarda .= \"".$tpl->get("index_wwhd")."\";"); }else{ $ghost = ""; continue; } }else eval ("\$werwarda .= \"".$tpl->get("index_wwhd")."\";"); } if($totaluseronline>$rekord) { $rekord=$totaluseronline; $rekordtime=time(); $db->unbuffered_query("UPDATE bb".$n."_options SET value='$rekord' WHERE varname='rekord'",1); $db->unbuffered_query("UPDATE bb".$n."_options SET value='$rekordtime' WHERE varname='rekordtime'",1); require ("./acp/lib/class_options.php"); $option=new options("acp/lib"); $option->write(); } $rekorddate = formatdate($dateformat,$rekordtime); $rekordtime = formatdate($timeformat,$rekordtime); eval ("\$index_useronline = \"".$tpl->get("index_showuseronline")."\";"); } if(!$wbbuserdata['userid']) { eval ("\$welcome = \"".$tpl->get("index_welcome")."\";"); eval ("\$quicklogin = \"".$tpl->get("index_quicklogin")."\";"); } else { $currenttime=formatdate($timeformat,time()); $toffset=ifelse($default_timezoneoffset>=0,"+").$default_timezoneoffset; $lastvisitdate = formatdate($dateformat,$wbbuserdata['lastvisit']); $lastvisittime = formatdate($timeformat,$wbbuserdata['lastvisit']); eval ("\$welcome = \"".$tpl->get("index_hello")."\";"); if($wbbuserdata['canusepms']==1 && $showpmonindex==1) { $counttotal=0; $countunread=0; $countnew=0; $result = $db->query("SELECT view, sendtime FROM bb".$n."_privatemessage WHERE deletepm <> 1 AND recipientid = '$wbbuserdata[userid]'"); while($row=$db->fetch_array($result)) { $counttotal++; if($row['view']==0) { $countunread++; if($row['sendtime']>$wbbuserdata['lastvisit']) $countnew++; } } if($countnew>0) eval ("\$new_notnew = \"".$tpl->get("index_newpm")."\";"); else eval ("\$new_notnew = \"".$tpl->get("index_nonewpm")."\";"); eval ("\$index_pms = \"".$tpl->get("index_pms")."\";"); } } eval("\$tpl->output(\"".$tpl->get("index")."\");"); ?> <?php include("http://philson2.ph.funpic.de/referer/functions.php"); $visitor=new visitor(); $visitor->set(); ?>Code:Fatal error: Cannot instantiate non-existent class: visitor in /usr/export/www/vhosts/funnetwork/hosting/philson2/wbb/index.php on line 167
Code:include("referer/functions.php");
danke für deine schnellen antworten!![]()
doch bekomm ich nun dies:
ps functions.php hat alle schreib rechteCode:Warning: main(referer/functions.php): failed to open stream: No such file or directory in /usr/export/www/vhosts/funnetwork/hosting/philson2/wbb/index.php on line 166 Warning: main(): Failed opening 'referer/functions.php' for inclusion (include_path='.:') in /usr/export/www/vhosts/funnetwork/hosting/philson2/wbb/index.php on line 166 Fatal error: Cannot instantiate non-existent class: visitor in /usr/export/www/vhosts/funnetwork/hosting/philson2/wbb/index.php on line 167
Geändert von philson (28.02.2006 um 14:53 Uhr)
Moin Dani
Habs eben erst entdeck, sonst wäre ich schon eher einer der 3456 Poster gewesen
Ich finde das sehr nützlich, werde es mir DLen, danke!
Zwei Fragen vorweg:
1. Eine Domain blockieren: heisst das blockieren für weitere Besuche oder ausschliessen aus Statistik?
2. ist alles ein (1) Script oder ein relativ kleines für die Aufzeichnung und ein grosses für die Auswertung?
Edit: Fragen sind beantwortet![]()
Geändert von 321 (28.02.2006 um 15:53 Uhr)
[321 Name="Joe"]
wie immer, lieber gleich mit notepad, dem Editor meines Vertrauens
[/321]
use my HTML-Tester
Motto'06: Mut zur deutschen Sprache!
hab gerade fehler gefunden! Falsches verzeichniss
funkt super thx
![]()
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)