PHP Kurs Logo  
 
Buttons PHP Kurs - Kapitel Trennlinie Downloads Trennlinie Was brauche ich ? Trennlinie Kontakt Trennlinie Impressum Buttons
 
 
Menu
Allererste PHP Schritte
- Webserver Installation
- PHP Editor Installation

PHP Grundlagen
- PHP Grundwissen
- Mein erstes Programm
- Kommentare einfügen
- Variablen
- PHP+HTML mischen
- If Abfragen
- Rechenarten
- Arrays
- Schleifen
- Funktionen
- Klassen
- Includes
- Sessions und Cookies
- Login mit Sessions
- Login mit Datenbank
- Referer auslesen
- Wert aus Datenbank
- Variablen übergeben

MySQL Grundlagen
- Was ist das ?
- Erste Schritte
- Verbindung herstellen
- Einfache SQL Befehle
- SQL Injection

Häufig gefragt
- Interessante Links
- Wasserzeichen mod_rewrite
- Thumbnails erstellen
- PHP Gästebuch
- PHP Header
- Webseiten auslesen
- Socket Verbindungen
- E-Mail Adressen prüfen
- E-Mails versenden
- $_GET & $_POST
- Datenbank sichern

Google PHP Referer auslesen - Suchergebnisse

Wenn man einem Link von einer Seite folgt und auf diesen klickt, wird in der Regel der sogenannte Referer mit an die neu betretene Homepage gesendet. Der Referer sagt der neuen Homepage, von welcher Homepage der Surfer gerade gekommen ist. Unteranderem kann dies interessant sein, um auszuwerten von welchen fremden Seiten die Leute so kommen.

Ich möchte in diesem Beispiel den Referer auslesen und bearbeiten. In diesem speziellen Fall interessiere ich mich für alle Leute, die über die Suchmaschine Google gekommen sind. Mich interessiert: "Wonach haben die in der Suchmaschine gesucht und diese Seite gefunden ?"

Bisher gespeicherte Google Suchen: 28806 (seit 09.2009)

Hier die LIVE Ergebnisse für php-kurs.info (neueste Suche oben):

TLD: IN GOOGLE WURDE GESUCHT: START: ANZAHL:
Länderflaggeserver2go datenbank anlegen010
Länderflaggedeutsch grundkurs für anfänger010
Länderflaggedeutsch grundkurs für anfänger010
LänderflaggeWie kann ich in php verhindern das ein mail beim öffnen gesendet010
LänderflaggePHP für Anfänger010
Länderflaggephp tutorial deutsch010
Länderflagge010
LänderflaggePHP sauberer Quelltext010
Länderflaggethumb erstellen php010
Länderflagge010
Länderflagge010
Länderflaggephp tutorial deutsch010
Länderflagge010
Länderflaggephp und html mischen010
Länderflaggedie letzten 10 referer mit php auslesen010
Länderflaggephp tutorials deutsch010
Länderflaggephp rechner010
Länderflaggephp gaestebuch download010
Länderflaggephp für anfänger010
Länderflaggephp rechner010
Länderflaggephp für anfänger010
Länderflagge010
Länderflaggeper script daten aus tabellen in Text variable010
Länderflaggeper script daten aus tabellen in Text variable010
Länderflaggephp html codieren010
Länderflaggephp header()010
Länderflaggelogin mit session cookie010
Länderflaggeper script daten aus tabellen in Text variable010
Länderflagge$_get $_post010
Länderflaggemysql dump zurückspielen010
Länderflaggephp oder html code010
Länderflaggephp login merken010
Länderflaggephp login merken010
LänderflaggeAS $header010
Länderflaggephp variable ohne $010
Länderflaggestrip_tags bilder erhalten010
Länderflaggephp grundkurs login010
Länderflaggephp login programmieren010
Länderflaggekommentar in php einfügen010
Länderflagge010
Länderflaggemysql mail senden wenn datensatz eingefügt wurde010
Länderflaggephp thumbnail erstellen010
Länderflaggephp-kurs.com010
Länderflaggephp Login mit Session010
Länderflaggesql injection für anfänger010
Länderflagge010
Länderflaggeif abfrage grösser als010
Länderflaggephp referer010
Länderflaggephp referer010
Länderflaggephp mail trennlinie010

TLD: = Repräsentiert die Google Domainendung (.de, .com, .at usw)
START: = Übersprungene Suchergebnisse (0=unter den ersten Suchergebnissen)
ANZAHL: = Anzahl angezeigter Suchergebnisse pro Seite


Wie liest man den Referer aus ?

In PHP gibt es eine Vielzahl von Daten die wir in dem Array $_SERVER wiederfinden, unter anderem auch den Referer. Der Referer wird abgefragt mit:

<?php
    $_referer 
$_SERVER["HTTP_REFERER"];
?>

So speichern wir den Referer in der Variable $_referer. Ein zurückgegebener Referer könnte zum Beispiel so aussehen:

http://www.google.de/search?hl=de&q=php+Grundkurs


Woher wissen wir nun diese ganzen Details über Google ?

Dazu müssen wir den Referer analysieren.

Einige Eigenarten dieser Adresse bei Google sind immer gleich. Anhand der Domain von Google können wir bestimmen über welche Ländersuche derjenige gesucht hat. Sucht jemand bei google.de, dann hat er warscheinlich deutsche Ergebnisse gesucht. Sucht jemand über google.pl, dann hat er warscheinlich polnische Ergebnisse gesucht. Weiterhin wird der Suchbegriff über das q= mit angegeben. Wir müssen also nur den Text dahinter rausfiltern und mit urldecode(); den kodierten String wieder zurückwandeln. Er wurde vorher kodiert, damit er in der Adresszeile mit angegeben werden kann.

Filtern der Suchergebnisse mit Regulären Ausdrücken

Zum herausfiltern der Suchergebnisse verwenden wir reguläre Ausdrücke. Diese sind nicht ganz einfach zu verstehen, bieten aber die einfachste Möglichkeit Zeichenketten zu zerlegen. Eine ganz genaue Beschreibung darüber findet man auf Wikipedia. Mit Hilfe eines Regulären Ausdrucks beschreiben wir PHP was wir suchen und PHP liefert uns das Ergebnis.


<?php
    $_referer 
$_SERVER["HTTP_REFERER"];
    
preg_match('/google\.(.*)\//Uis'$_referer$_google["land"]);
?>

Erklärung:

Im regulären Ausdruck gibt es den ersten Teil, wo wir beschreiben müssen, was wir genau suchen. Im zweiten Teil müssen wir einige Modifier (Optionen) setzen - PHP also sagen wie er sich in bestimmten Fällen verhalten soll.

Die Syntax lautet dafür also: Delimiter + Regex + Delimiter [+ Modifiers]

Unser Regulärer Ausdruck heisst: /google\.(.*)\//Uis

Wir suchen damit alles was zwischen google. und einem / steht. Wir wollen in diesem Fall die Domainendung haben.

Wir klammern das was wir suchen mit dem Zeichen / ein und geben die Optionen hinter dem zweiten / an. Unsere Optionen lauten Uis:

/google\.(.*)\//Uis

Ihr wundert euch, warum wir vor dem Punkt und vor dem / einen Backslash \ geschrieben haben ? Ein Punkt steht in einem regulären Ausdruck für einen beliebigen Text der folgen kann. Wir wollen aber nicht einen beliebigen Text finden, sondern genau diesen Punkt - daher maskieren wir den Punkt mit dem Backslash \ und sagen PHP damit, dass er das kommende Zeichen nicht als Befehl sehen soll. Außerdem suchen wir das / aus der Internetadresse. In diesem Fall haben wir aber / als Trennzeichen genommen ; zwischen dem regulären Ausdruck den wir suchen und den "Optionen" die wir gesetzt haben. Damit PHP wieder versteht, dass hier der reguläre Ausdruck nicht zuende ist und wir genau dieses Zeichen suchen haben wir es maskiert: \/

Anhand der modifier (Optionen) sagen wir PHP unteranderem mit dem i, ob er Groß- und Kleinschreibung dabei beachten soll. Reguläre Ausdrücke seien hier in dem Thema nur kurz zur Erklärung angerissen. Eine genaue und ausführliche Erklärung erhaltet Ihr in unseren Tutorials. RegularExpressions sind ein mächtiges Werkzeug.


Den Referer mit RegExp zerlegen

Unser Programmcode womit wir prüfen, ob jemand von Google gekommen ist. Wenn dem so ist, dann wird der Referer zerlegt und ausgewertet:

<?php
    $_ref 
$_SERVER['HTTP_REFERER'];

    if (
eregi('google\.'$_ref))
        {
        
# Besucher kommt von Google
        
$_ref .= '&';

        
preg_match('/google\.(.*)\//Uis'$_ref$_google['land']);
        
preg_match('/q=(.*)&/UiS'$_ref$_google['suchbegriff']);
        
preg_match('/start=(.*)&/UiS'$_ref$_google['start']);
        
preg_match('/num=(.*)&/Uis'$_ref$_google['anzahl']);

        
$_google['suchbegriff'][1] =
                                
urldecode($_google['suchbegriff'][1]);

        
var_dump($_google);
        }
?>

Erst wird geprüft, ob das Wort google. in dem Referer vorkommt. Wenn dem so ist, dann wird die Zeichenkette zerlegt. Vorher noch fügen wir an das Ende dieser Zeichenkette das &. Dies hat den Vorteil die regulären Ausdrücke einfacher gestalten zu können. So kann immer davon ausgegangen werden, das nachdem etwas in der Adresszeile mit = gesetzt wurde auch mit & abgeschlossen wird, da in einer Adresszeile die übergebenen Parameter ja alle mit diesem Zeichen getrennt werden.

Achtung: wenn Ihr die Daten in eine Datenbank schreibt und die Umlaute nicht korrekt dargestellt werden, dann müsst Ihr das richtige Charset verwenden. Ich habe auf meiner Seite bevor ich die Ergebnisse in die Datenbank geschrieben habe diesen mit einem MySQL Befehl vorher bestimmt:

set character set utf8
set names utf8


<<<< zurück Kapitelauswahl vorwärts >>>>



Kommentare:

Bitte sachlich, keine Flames und kein Spam. PHP & HTML Code wird automatisch entfernt. Links werden ebendso entfernt. Tips & Tricks, Verbesserungen oder Wünsche sind gerne gesehen.



Dein Kommentar zu diesem Kapitel:

Dein Name:
Bitte eingeben:
Kommentar:
 



Content
 
  Bottom Design  
+ SOCIAL BOOKMARK +
Livecams | $$$ Webmaster $$$ | Treiber Download