andreas: alle Seitenzugriffe auf verschiedene Seiten zählen

Hi!

Also ich überlege gerade, wie ich am einfachsten alle Seitenzugriffe Zählen und darstellen kann. Ich weiß, steht alles in den Logfiles, nur suche ich nach einer einfachen Möglichkeit, alle Seitenzugriffe auf einer php-Seite darzustellen.
Einzelne Counter in php habe ich eigentlich immer der Art gemacht, dass ich eine txt in eine bestimmtes Verzeichnis geschrieben habe, und bei jedem öffnen die Zahl darin um 1 erhöht habe, und wieder gechlossen. Das geht ja ganz gut mit einer File, aber mit allen ist das soeine Sache, wahrscheinlich etwas kompliziert und unpraktisch, oder? Außerdem müßte ich dann für die Auswetung zig txts öffnen. Die andere Möglichkeit wäre eine Tabelle in der DB, wobei ich dadurch schon wieder mehr DB - Traffic erzeuge, halt andauernd für jede Seite neue Verbindung aufbauen... ist wohl auch nicht optimal.
Was gibt es da noch für Möglichkeiten?
Wenn ich doch die Variante mit den Ascii Dateien nehmen würde, könnte ich das wohl über in einem extra Script machen, welches über include() eingebunden wird? Nur woher weiß das Script dann, um welche Datei(Seite) es sich handelt?
Was wäre hier wohl die praktikabelste Möglichkeit?

Grüsse
  Andreas

  1. Hi Andreas,

    Wenn ich doch die Variante mit den Ascii Dateien nehmen würde, könnte ich das wohl über in einem extra Script machen, welches über include() eingebunden wird? Nur woher weiß das Script dann, um welche Datei(Seite) es sich handelt?

    Wahrscheinlich anhand des Dateinamens.

    Was wäre hier wohl die praktikabelste Möglichkeit?

    Ich habe mal einen Counter programmiert, der die IP's in ein
    Textfile schreibt und dann mit Doppelpunkten abtrennt. Danach
    kann man das als Array aufsplitten und auswerten / -geben.

    Bye,
    Peter

    1. Hallo Peter!

      Wenn ich doch die Variante mit den Ascii Dateien nehmen würde, könnte ich das wohl über in einem extra Script machen, welches über include() eingebunden wird? Nur woher weiß das Script dann, um welche Datei(Seite) es sich handelt?

      Wahrscheinlich anhand des Dateinamens.

      Ja, aber wie denn? Wahrscheinlich mache ich mal wieder einen Denkfehler, aber ich kann mir gerade nicht vorstellen, wenn ich ich eine eigenständige Datei mit fopen eine ascii Datei öffnen will, und zwar genau die mit dem Namen der Internetseite, wo diese php-Datei eingebunden werden soll, geht das so einfach? Klar, auf der Seite wo ich einbinde habe ich den Dateinamen, aber in der included nicht, oder?

      Was wäre hier wohl die praktikabelste Möglichkeit?

      Ich habe mal einen Counter programmiert, der die IP's in ein
      Textfile schreibt und dann mit Doppelpunkten abtrennt. Danach
      kann man das als Array aufsplitten und auswerten / -geben.

      Also würdest Du mir raten nur eine Ascii Datei, und dann einfach immer den Dateinamen dazu reinschreiben(was ist wenn mehrere gleichzeitig geöffnet werden?) oder, oder jeweils den Dateinamen und die Anzahl mit Doppelpunkt trennen, die Ganze Datei auslesen und die Stelle suchen, den Wert ersetzen und alles überscheiben?
      Von der DB Variante würdet Ihr abraten? Hätte die sowieso, und bevor ich sowas mache, wäre das doch die saubere Methode, oder? Nur sollte dadurch nicht die Ladezeit der Seite unnötig verlängert werden, das ist GANZ wichtig!

      Grüsse
        Andreas

  2. Moin!

    Was wäre hier wohl die praktikabelste Möglichkeit?

    Wenn du eine Zugriffsstatistik willst, nimm ein Tool für Zugriffsstatistik. Wenn du Zugriff auf deine Logfiles hast, ist der Rest kein Problem mehr.

    Als Freeware empfehle ich Webalizer. Gibts als Version für Linux/Unix und für Windows, und wird über eine Textdatei konfiguriert. Das Ausgabeformat ist HTML mit PNG-Grafiken (also in etwa das, was du wolltest), und kann in gewissen Grenzen (mit CSS aber so ziemlich unbegrenzt) angepaßt werden.

    Ich finde die Konfigurierbarkeit von Webalizer übrigens WESENTLICH BESSER als das, was mir hier gerade der WebTrends Log Analyzer (für immerhin über tausend Mark) fabrizieren will. Der braucht Stunden (vermutlich TAGE!!!), um ein Logfile mit knapp 60000 Hits pro Tag auszuwerten. Außerdem kennt WebTrends nur Netscape-Browser und IE-Browser, und "andere". Keine Chance, mal einen Eindrück von der Menge an Operas etc. zu gewinnen. Keine Chance, nach eigenen Definitionen Verzeichnisse zu gruppieren, und so weiter...

    Ach ja, ein Link fehlt noch:
    http://www.mrunix.net/webalizer/ Linux-Version
    http://www.medasys-lille.com/webalizer/ Windows-Version

    Webalizer läßt sich prima als cron-Job einrichten und erzeugt dann in regelmäßigen Abständen aktuelle Dateien (am besten in einem eigenen Verzeichnis), oder es wird durch ein PHP- oder Perl-Skript aufgerufen (innerhalb einer Minute sollten auch große Logfiles um die 500 MB analysiert sein, wenn man nicht noch die IP-Adressen auflösen will). Oder natürlich auf dem eigenen Rechner zuhause. Und dann wahlweise die Ergebnisse wieder hochladen.

    - Sven Rautenberg

    1. Hi!

      Als Freeware empfehle ich Webalizer. Gibts als Version für Linux/Unix und für Windows, und wird über eine Textdatei konfiguriert.

      Ja, den nutze ich bereits. Ist auch sehr schon und interessant, ich willte aber eine Seite in das admin-Menü der Seite, wo z.B. Datensätze imn der Datenbank angelegt werden, Newsletter verfasst... an der Stelle soll auch lediglich eine Auflistung(evtl. ausgewählter) Seiten  stehen, mit der jeweiligen Anzahl an Hits dahinter. Das Optimum wäre hier wohl eine DB, aber ich weiß halt nicht wegen der Geschwindigkeit.
      Es geht hierbei nicht um so gut besuchte Seiten, der Kunde will lediglich sehen, welche Seite wie ogt im gegensatz zu den anderen angeklickt wurde. SONST NICHTS! Ich weiß das man das im webalizer schön sehen kann, aber das soll gerade nicht sein, sondern eine kleine Seite im Admin-Menü, auf der man die aktuellen Daten sieht.

      Webalizer läßt sich prima als cron-Job einrichten und erzeugt dann in regelmäßigen Abständen aktuelle Dateien (am besten in einem eigenen Verzeichnis), oder es wird durch ein PHP- oder Perl-Skript aufgerufen (innerhalb einer Minute sollten auch große Logfiles um die 500 MB analysiert sein, wenn man nicht noch die IP-Adressen auflösen will).

      Das macht der Provider von sich aus, und man kann alles online einstellen, wirklich Prima!

      Aber vielen Dank für die Antwort, gut zu wissen das das wirklich ein sehr gutes Tool ist!

      Grüsse
        Andreas

      1. Moin nochmal!

        Ja, den nutze ich bereits. Ist auch sehr schon und interessant, ich willte aber eine Seite in das admin-Menü der Seite, wo z.B. Datensätze imn der Datenbank angelegt werden, Newsletter verfasst... an der Stelle soll auch lediglich eine Auflistung(evtl. ausgewählter) Seiten  stehen, mit der jeweiligen Anzahl an Hits dahinter. Das Optimum wäre hier wohl eine DB, aber ich weiß halt nicht wegen der Geschwindigkeit.

        Wenn ich dich richtig verstanden habe, willst du sowas:

        ADMIN-MENÜ
        ...diverse
        ...menüoptionen
        ...für den
        ...admin
        ----------
        Heute waren 2345 Leute auf der Seite.
        Zugriffszahlen: /verzeichnis1 - 1234 Hits
                        /verzeichnis2 - 345 Hits
                        /forum        - 567 Hits

        Es geht hierbei nicht um so gut besuchte Seiten, der Kunde will lediglich sehen, welche Seite wie ogt im gegensatz zu den anderen angeklickt wurde. SONST NICHTS! Ich weiß das man das im webalizer schön sehen kann, aber das soll gerade nicht sein, sondern eine kleine Seite im Admin-Menü, auf der man die aktuellen Daten sieht.

        Webalizer wäre trotzdem dein Freund. Der kann die Logfiles unheimlich schnell auswerten. Und du könntest dann die Ergebnisseiten unheimlich schnell auswerten. Das ist vielleicht besser, als eine Datenbanklösung draufzusetzen, die ja 1. noch geschrieben werden muß und 2. dann auch funktionieren soll.

        Webalizer läßt sich prima als cron-Job einrichten und erzeugt dann in regelmäßigen Abständen aktuelle Dateien (am besten in einem eigenen Verzeichnis), oder es wird durch ein PHP- oder Perl-Skript aufgerufen (innerhalb einer Minute sollten auch große Logfiles um die 500 MB analysiert sein, wenn man nicht noch die IP-Adressen auflösen will).
        Das macht der Provider von sich aus, und man kann alles online einstellen, wirklich Prima!

        Die Lösung ist im Prinzip recht simpel: Bastel für Webalizer eine zweite Konfigurationsdatei, welche die Logfiles entsprechend filtert. Vielleicht reicht das ja schon aus für die Belange des Kunden. Man kann ja z.B. Verzeichnisse ziemlich schön zusammenfassen, daß man nicht nur Einzeldateien sieht.

        Und wenn das noch nicht reicht, bzw. zu doof aussieht: Einbinden der Extra-Webalizer-Seite in einem IFRAME in das Admin-Menü, oder wirklich Auseinandernehmen der Daten, die Webalizer generiert hat. Es gibt da ganz nützliche Optionen, um Daten als Dump in eine Datei zu schreiben. Das solltest du mal untersuchen.

        Aber vielen Dank für die Antwort, gut zu wissen das das wirklich ein sehr gutes Tool ist!

        Ich habe Webalizer schon etwas ausgereizt. Aber ich bin sicher, er hat noch Potential. :)

        - Sven Rautenberg

        1. Hi Sven!

          Sicher hat der das Potential dazu, nur leider darf ich nunmal nicht an die Configuration ran, bis auf die Pflege einer Datei über ein Online-Formular. Und das ist für die gesammte Site.
          Also das kann ich vergessen, und selber die logfiles auswerten ist glaub ich eine Nummer zu groß für sowas. Aber wenn das jetzt sagen wir mal 25 Seiten sind, welche selbstgestrickte Variante würdest Du empfehlen? Eine einfachen DB-Lösung, oder 25 ascii Dateien mit eigenem Counter, oder eine große ascii?

          Grüsse
            Andreas

          1. Moin

            Also das kann ich vergessen, und selber die logfiles auswerten ist glaub ich eine Nummer zu groß für sowas. Aber wenn das jetzt sagen wir mal 25 Seiten sind, welche selbstgestrickte Variante würdest Du empfehlen? Eine einfachen DB-Lösung, oder 25 ascii Dateien mit eigenem Counter, oder eine große ascii?

            Wenn du eine Datenbank hast, dann willst du die Datenbank verwenden. Dann kannst du nämlich den größten Teil der Arbeit dem Datenbankserver überlassen. Ein UPDATE LOW_PRIORITY Tabelle SET Counter = Counter+1 WHERE Dateiname = $DeinDateiName tut nämlich schon alles nötige. Ausserdem sollte es die anderen Skripte die noch aus der Datenbank lesen nicht beeinflussen, da MySQL durch das LOW_PRIORITY angewiesen wird, die Query zurückzustellen bis kein Prozess mehr aus der Tabelle lesen will.

            Den Dateinamen der Datei, wenn du per include einbindest, findest du trotzdem in SCRIPT_NAME bzw. SCRIPT_FILENAME.

            --
            Henryk Plötz
            Grüße aus Berlin

            1. Hi Henryk!
              Danke für die Antwort, so wird das am einfachsten sein - denke ich auch. Mit LOW_PRIARITY ist ein guter Tip.
              Und evtl kann ich das später noch zu einem kleinen Individuellen Tracking-Tool erweitern, muß dann ledeiglich inserts machen und die SessionID mit eintragen, oder was in der Art(Ich weiß, gibt es alles schon, aber ich brauche diese umfassenden Lösungen für sowas nicht, das zu implementieren und zu bedienen ist um ein vielfaches komplizierter als 2,3 kleine Scripte!)
              Und auch mit dem Include, ich dachte immer - sind ja externe Dateien, aber das liegt wohl daran, dass die eingebunden werden, so als würden Sie schon immer da drin stehen, oder?
              Naja, jedenfalls werde ich das jetzt erstmal so probieren, mit update!
              Vielen Dank

              Andreas

  3. Hi,
    versuch mal http://www.phpopentracker.de/.

    Jan
    --