Maresa P.: Auswertung von HTTP Referer

Hallo,

beim ausfüllen eines Formulars auf meine Website logge ich in einer Datenbank den HTTP Referer (Herkunft von Benutzer) in einer MySql Datenbank mit.

In der Datenbank stehen nun Referer wie:

http://www.google.de/search?q=blabla&ie=UTF-8&oe=UTF-8&hl=de&meta=
http://www.google.de/search?q=dfgdfg&ie=UTF-8&oe=UTF-8&hl=de&meta=
http://suche.lycos.de/cgi-bin/pursuit?query=blabla&cat=loc&matchmode=and&mtemp=main&etemp=error

usw.

Nun möchte ich diese Adressen auswerten. Ich möchte mir die Gesamtzugriffe über eine Domain ausgeben lassen.

Bspl:
www.google.de: 185
www.lycos.de: 251

Das ganze mächte ich mit PHP verwirklichen.

Frage:

  • Wie extrahiere ich aus der kompletten URL den Domainnamen?
  • Wie ordne (gruppiere) ih die Domainnamen dann (array?)?
  • Wie würdet Ihr das lösen?

Vielen Dank

Maresa P.

  1. Du mußt ein muster entwerfen:
    z.B. \www.*.de\

    anschließend über substr() extrahieren und eine Fkt. schreiben, welche mitzählt...

    mfG,
        Markus.

  2. Halihallo Maresa

    • Wie extrahiere ich aus der kompletten URL den Domainnamen?

    alle Zeichen nach dem zweiten bis dritten '/'.

    • Wie ordne (gruppiere) ih die Domainnamen dann (array?)?

    Nein, nicht Array, über eine geeignete SQL-Abfrage.

    • Wie würdet Ihr das lösen?

    Den Referer nicht als "Standalone"-Information in der Datenbank speichern, sondern
    die "Domaininformation" gleich bei dem Speichern in der Datenbank extrahieren und als
    solche speichern. Das spart bei oftmaligem Abfragen der "Wieviele Zugriffe über Domain
    xy" wesentlich Performance und erleichtert das Gruppieren nach einer bestimmten Domain.

    Ansonsten informiere dich über LIKE bzw. RLIKE und GROUP BY, aber sei gewarnt, dass
    (R)LIKE besonders beim Reporting von Statistiken _tödlich_ sind. Also mein Ratschlag,
    den du dir zu Herzen nehmen solltest: Extrahiere die relevante Information vorher, das
    Reporting soll nicht Rohdaten auswerten, sondern wie der Name schon sagt: Reporten.

    Viele Grüsse

    Philipp

    1. Hallo Phillip,

      vielen Dank für Deine ausführliche Antwort. Hat mir sehr viel weitergeholfen. Ich werde es nun so machen, dass ich nur die relevanten Daten in der Datenbank abspeicere. Also den Domainnamen _vor_ dem Speichern aus der URL extrahiere.

      alle Zeichen nach dem zweiten bis dritten '/'.

      Wie muss der reguläre Ausdruck hierfür heissen?

      Vielen Dank

      Maresa P.

      1. Halihallo Maresa P.

        alle Zeichen nach dem zweiten bis dritten '/'.
        Wie muss der reguläre Ausdruck hierfür heissen?

        /^(.*?)://(.*?)//
        düfte dem wohl die funktionale Basis geben. Subdomains werden dadurch natürlich nicht
        separat gefiltert und werten als Bestandteil des Domainnamens gezählt. Der Domainname
        ist dann im zweiten "Platzhalter", das verwendete Protokoll im ersten (http(s), ...)

        Viele Grüsse und bitte

        Philipp

  3. Frage:

    • Wie extrahiere ich aus der kompletten URL den Domainnamen?

    Wenn es ausreicht gibt es die Funktion parse_url(). Diese liefert Dir in einem Array u.a. auch den host zurück. Falls das nicht ausreicht musst Du zusätzlich (bzw. alternativ) mit regulären Ausdrücken arbeiten.

    • Wie ordne (gruppiere) ih die Domainnamen dann (array?)?

    Versteh ich jetzt nicht ganz? Wenn Du die URL in eine Datenbank schreibst kannst Du dir die Ergebnisse per SELECT sortiert ausgeben lassen? Ich denk da mal spontan an die Funktion COUNT?
    Vielleicht so:
    Ein erstes Statement liest Dir dir Anzahl aller URLS aus Deiner Datenbank. Das zweite Statement zählt die Anzahl der Datensätze für jeden Eintrag aus dem ersten Statement. Also SELECT COUNT(url) FROM urltable WHERE name="$name" oder so in die Richtung. Vielleicht kann man die Abfragen auch in einem SELECT unterbringen.

    Hoffe ich konnte ein wenig helfen,
    Gruss AndreD