PHP Kurs Logo  
 
Buttons PHP Kurs - Kapitel Trennlinie Was brauche ich ? Trennlinie Kontakt Trennlinie Impressum & Datenschutz 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
- Was ist Adwords ?
- 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
- Server DDOS Angriffe Abwehren
- Webhosting - Worauf ist zu achten ?

Interessante Artikel


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: (seit 09.2009)

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

TLD: IN GOOGLE WURDE GESUCHT: START: ANZAHL:

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 >>>>






Content
 
  Bottom Design  

PepperTools.de Software Download | Software Shop
PepperTools Software Shop