Hannibal: Logdateien

Hallo zusammen

Ich versuche schon seit einer Weile meine Log-Dateien auszulesen und einen einfachen Zugriffszähler zu machen. Dieser ist allerdings nicht so einfach.

Mein Prinzip ist folgendermassen: Ich lese alle IPs aus und "lösche" danach die gleichen raus und zählen die Restlichen zusammen.
Ich will also alle E-Mailadressen, die gleich sind nicht zählen.

Wie soll ich das anstellen?
Mit Arrays? oder wie?
Ich habe zwar schon versuche gemacht. Aber die habe ich aufgegeben.

Vielen Dank für eure Tipps

Gruss Hannibal

  1. Hallo,

    Ich lese alle IPs aus und "lösche" danach die gleichen raus und zählen die Restlichen zusammen.

    Ich will also alle E-Mailadressen, die gleich sind nicht zählen.

    Wo kommen denn ploetzlich die E-Mail-Adressen her? ;-)

    Wie soll ich das anstellen?
    Mit Arrays?

    Ja. Das waere eine Moeglichkeit.
    Z.B. mit den IP-Adressen als Schluessel.
    Die Anzahl Elemente des Arrays entspricht
    dann der Anzahl verschiedener Schluessel.

    Dummycode:

    unset($ipliste);

    schleife
      {
       $ipadresse aus Logfile ermitteln;
       $ipliste[$ipadresse]=1;
      }

    $anzahlips=count($ipliste);

    Das ist vielleicht nicht die beste
    Methode, aber sie duerfte funktionieren.

    HTH, Gruesse,

    Thomas

    1. Hallo,

      Hallo Tom

      Erst mal danke für deine Antwort.

      Wo kommen denn ploetzlich die E-Mail-Adressen her? ;-)

      Us em heitere Himu.(Bin auch Berner)

      Ja. Das waere eine Moeglichkeit.
      Z.B. mit den IP-Adressen als Schluessel.

      Ich merke, dass ich noch etwas ein Laie bin.
      Du meinst ich sollte den Array nach der IPadresse benennnen.

      Die Anzahl Elemente des Arrays entspricht
      dann der Anzahl verschiedener Schluessel.

      Dummycode:

      unset($ipliste);

      Warum hier? Die Variable hat doch keinen Inhalt.

      schleife
        {
         $ipadresse aus Logfile ermitteln;
         $ipliste[$ipadresse]=1;

      Verstehe ich das so richtig: Man teilt jedem Array, dessen Namen die IP-Adresse hat die Zahl eins zu?

      }

      $anzahlips=count($ipliste);

      Wie ich das jetzt analysiert habe, werden allerdings die gleichen IPs nicht herausgelöscht?
      Sehe ich das falsch?

      Das ist vielleicht nicht die beste
      Methode, aber sie duerfte funktionieren.

      Genau so etwas habe ich gesucht.
      Danke

      HTH, Gruesse,

      Thomas

      Gruss aus Winterthur
      Michy

      1. Hallo Michael,

        Wo kommen denn ploetzlich die E-Mail-Adressen her? ;-)
        Us em heitere Himu. (Bin auch Berner)

        Ah, genau. Wurzeln im Schwarzenburgerland, stimmt's?
        (Du hattest mir mal ein Mail geschrieben.)

        Du meinst ich sollte den Array nach der IPadresse benennnen.

        Nein, die Schluessel, nicht die Variable selbst.

        unset($ipliste);
        Warum hier? Die Variable hat doch keinen Inhalt.

        Einfach um sicher zu gehen, dass die Variable nicht existiert.
        Weil ja nachher die "Groesse" (Anzahl Schluessel) des Arrays
        entscheidend ist.

        $ipliste[$ipadresse]=1;
        Verstehe ich das so richtig: Man teilt jedem Array, dessen Namen die IP-Adresse hat die Zahl eins zu?

        Genau.
        Wenn eine IP-Adresse mehrmals vorkommt,
        wird dem Array mit diesem Schluessel halt
        mehrmals die 1 zugewiesen.
        Das tut niemandem weh. ;-)

        Zuweisungen:
        $ipliste["127.0.0.1"]=1;
        $ipliste["255.255.255.255"]=1;
        $ipliste["127.0.0.1"]=1;

        Resultat: Der Array hat zwei Elemente:
        $ipliste["127.0.0.1"]=1;
        $ipliste["255.255.255.255"]=1;

        Wie ich das jetzt analysiert habe, werden allerdings die gleichen IPs nicht herausgelöscht?

        Naja, sie werden nicht mehrfach gezaehlt.
        Also entspricht die Anzahl Array-Elemente
        der Anzahl verschiedener IP-Adressen.
        Und das ist doch, was Du wolltest.

        ---

        Wenn Du wissen willst, welche IP-Adresse wie viele
        Anfragen gemacht hat, dann kannst Du natuerlich
        das Skript entsprechend anpassen.

        Statt einfach immer die Eins zuzuweisen
        $ipliste[$ipadresse]=1;
        musst Du schauen, ob es zu diesem Schluessel
        schon einen Wert gibt.
        Wenn ja: Um 1 erhoehen, wenn nein: 1 zuweisen.

        if (isset($ipliste[$ipadresse]))
          $ipliste[$ipadresse]++;
        else
          $ipliste[$ipadresse]=1;

        ---

        Etwas Lektuere:
        http://www.php.net/manual/de/language.types.array.php
        http://www.php.net/manual/de/ref.array.php
        http://www.php.net/manual/de/language.operators.increment.php

        ---

        Fuer "Logfile-Analyse" gibt es uebrigens zahlreiche
        gute Tools, die Dir wunderschoene Torten- und
        Balkendiagramme herstellen. Zum Beispiel:
        http://www.analog.cx/
        http://awstats.sourceforge.net/
        http://www.mrunix.net/webalizer/

        Gruesse,

        Thomas

        P.S. Ich wuerde nie im Leben einen "Role-Account"
        wie info@example.com in Foren oder Newsgroups
        angeben. Ist aber Geschmackssache.
        (Ob info@ ein offizieller Role-Account gemaess
        einer RFC ist, weiss ich nicht.)
        Deine Homepage gefaellt mir auf den ersten Blick gut.
        Du solltest noch eine Charset-Angabe machen,
        am besten serverseitig.
        Aber die steht ja hier nicht zur Diskussion... ;-)

        1. Hallo Michael,

          Hoi Tom

          Ah, genau. Wurzeln im Schwarzenburgerland, stimmt's?
          (Du hattest mir mal ein Mail geschrieben.)

          Genau.

          Nein, die Schluessel, nicht die Variable selbst.

          Aha. Ich meinte das richtige, aber habe es falsch gesagt.
          $irgendwas[Schlüssel] oder?

          Einfach um sicher zu gehen, dass die Variable nicht existiert.
          Weil ja nachher die "Groesse" (Anzahl Schluessel) des Arrays
          entscheidend ist.

          ok.

          Genau.
          Wenn eine IP-Adresse mehrmals vorkommt,
          wird dem Array mit diesem Schluessel halt
          mehrmals die 1 zugewiesen.
          Das tut niemandem weh. ;-)

          Zuweisungen:
          $ipliste["127.0.0.1"]=1;
          $ipliste["255.255.255.255"]=1;
          $ipliste["127.0.0.1"]=1;

          Resultat: Der Array hat zwei Elemente:
          $ipliste["127.0.0.1"]=1;
          $ipliste["255.255.255.255"]=1;

          ok.
          Sehr kreative IPs. ;-)

          Wie ich das jetzt analysiert habe, werden allerdings die gleichen IPs nicht herausgelöscht?

          Naja, sie werden nicht mehrfach gezaehlt.
          Also entspricht die Anzahl Array-Elemente
          der Anzahl verschiedener IP-Adressen.
          Und das ist doch, was Du wolltest.

          Genau.

          »»Gruesse,
          »»Thomas

          Gruss
          Hannibal

  2. Hallo,

    also du erstellst ein leeres Array.

    Dann liest du die Datei zeilenweise ein und gibst das dann aus

    if(in_array($ipausderdatei, $array))
    {
    //nix
    }
    else
    {
     array_push($array,$ipausderdatei);
    }

    Am ende:
    echo count($array);

    MFG
    Andavos

    --
    http://www.rpgcommunity.de/clanwissen/index.php Webdesign, PHP, Clan-Aufbau und mehr
    1. Hallo,

      also du erstellst ein leeres Array.

      Dann liest du die Datei zeilenweise ein und gibst das dann aus

      if(in_array($ipausderdatei, $array))
      {
      //nix
      }
      else
      {
       array_push($array,$ipausderdatei);
      }

      Am ende:
      echo count($array);

      Vielen vielen Dank.
      Das ist sehr klug. Ich glaube jetzt sollte ich es hinkriegen.

      MFG
      Andavos

      Gruss aus winterthur(CH)
      Hannibal