Countersuche

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Countersuche

    Hallo,

    suche einen Counter, der auf einer Textdatei oder ähnlichem basiert, also ohne DB auskomm. Folgendes sollte er können:

    - IP Reload Sperre
    - Online user anzeigen
    - Gesamtuser anzeigen
    - Heute user anzeigen
    - Includierbar sein

    Naja und funktionieren sollte er!

    Danke im vorraus!

    P.s.: habe echt schon lange gesucht, aber keine wirklich guten gefunden, die auch richtig funktionieren :/

  • #2
    Counter ohne DB geht nicht lange gut.

    Irgendwann versuchen zwei Instanzen gleichzeitig den Counter zu erhöhen, und dann werden Views bzw. Visits unterschlagen.

    Hmm ...

    Eine Möglichkeit gäbe es, aber erstens schluckt die ne Menge Platz auf der Platte und zweitens gibt´s das mit Sicherheit nicht fertig:

    - je Datum ein Verzeichnis
    - je IP ein File mit Counter
    - ein Cron-Job, der Dateien von vergangenen Tagen zusammen fasst.

    Dann könntest du deine Features folgendermaßen implementieren
    • IP Reload Sperre:
      file_exists("$heute/$ip") && time()-filemtime("$heute/$ip")<$mindestabstand
    • heute user anzeigen
      files in Verzeichnis $heute zählen
    • Online user anzeigen
      heute user bei denen time()-filemtime>=$mindestabstand
    • Gesamtuser anzeigen
      Ergebnis deines Cronjobs + User heute
    mein Sport: mein Frühstück: meine Arbeit:

    Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

    Kommentar


    • #3
      achso ok danke :>
      dann muss ich wohl doch einen auf db basis nehmen. welche sind da denn gut? habe gehört, dsas z.b. der chcounter sehr große db's verursacht ... :/

      Kommentar


      • #4
        humpfft ... keine Ahnung.
        Aber das ist ja auch schnell gestrickt, es sind für deine Zwecke nur zwei Tabellen nötig:

        counter
        - datum DATE
        - zaehler BIGINT UNSIGNED

        counter_today
        - datum DATE
        - ip VARCHAR(15) (oder umrechnen in 32bit-Integer und INT UNSIGNED benutzen)
        - timeout TIME (ab welcher Uhrzeit darf die IP neu gezählt werden?)
        - zaehler INT UNSIGNED
        Primary Key auf IP und Datum
        • Zählen und IP-Sperre:
          insert into counter_today values (curdate(), '$ip', date_add(now, interval 5 minute), 1)
          on duplicate key update set zaehler=zaehler+1
          ;
          Das Intervall kannst du natürlich Deinen Wünschen entsprechend anpassen.
        • User heute:
          select sum(zaehler) from counter_today where datum=curdate()
        • User gesamt:
          select sum(zaehler) from counter_today plus select sum(zaehler) from counter
        • User online:
          select count(*) from counter_today where timeout>now()
        • Platz sparen: tägliche Zusammenfassung speichern (ungefähr täglich ausführen!)
          insert into counter select datum, sum(zaehler) from counter_today where datum<curdate();
          delete from counter_today where datum<curdate();
        mein Sport: mein Frühstück: meine Arbeit:

        Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

        Kommentar


        • #5
          oh ja, danke
          hat mir geholfen, werde das versuchen umzusetzten!

          Kommentar


          • #6
            ups ... hab beim update vergessen, das interval zu berücksichtigen ...

            ... on duplicate key update set zaehler=zaehler+ (timeout<now());
            mein Sport: mein Frühstück: meine Arbeit:

            Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

            Kommentar


            • #7
              Original geschrieben von Titus
              ups ... hab beim update vergessen, das interval zu berücksichtigen ...

              ... on duplicate key update set zaehler=zaehler+ (timeout<now());
              You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SET zaehler=zaehler + (timeout

              hm, geht wohl nicht ...

              Kommentar


              • #8
                Original geschrieben von Titus

                insert into counter select datum, sum(zaehler) from counter_today where datum<curdate();
                delete from counter_today where datum<curdate();
                [/list][/B]
                Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause

                Kommentar


                • #9
                  ist denn das sooo schwer ....

                  insert into counter select datum, sum(zaehler) from counter_today where datum<curdate() group by datum;
                  delete from counter_today where datum<curdate();
                  mein Sport: mein Frühstück: meine Arbeit:

                  Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

                  Kommentar

                  Lädt...
                  X