2009-07-28 13 views
5

Ich möchte die Anzahl der Zugriffe auf die Seiten aufzeichnen und denke dabei entweder an einen einfachen dateibasierten oder SQLite-Speicher.Best Practice für die Aufzeichnung von Seitenaufrufen mit PHP?

dateibasierte Option
Eine Datei enthält eine ganze Zahl nur mit jeder Seite Besuch erhöht und jede Seite hat einen eindeutigen Dateinamen. Wenn ich eine Datei unter Verwendung eines Modus öffne, kann ich schreiben, aber ist es möglich, es nicht zu schließen, um jedes Öffnen und Schließen der Datei zu speichern?

SQLite Option
Eine einfache Tabelle mit Spalten und Seitennamen Hits. Die gleiche Frage ist wieder möglich, es nicht zu schließen, um das Öffnen und Schließen der db jedes Mal zu speichern?

Antwort

4

Wenn Sie dies wirklich im Haus tun müssen, sollten Sie mit der SQLite-Methode gehen. Während ein kleiner Overhead (aufgrund des Öffnens der Datenbankdatei) vorhanden ist, kann es beim Speichern von strukturierten Daten auch bemerkenswerte Vorteile geben.

Sie könnten zum Beispiel ein Datumsfeld hinzufügen und dann täglich/stündlich/monatlich/welche Daten für jede Seite erhalten.

Sie können auch die IP-Adresse für jeden Besucher hinzufügen und dann Besuchsdaten extrahieren. Auf diese Weise können Sie leicht Daten über das Verhalten Ihrer Site-Benutzer extrahieren.

Sie können auch den User-Agent und das Betriebssystem Ihrer Besucher speichern, damit Sie wissen, auf welche Browser Sie zielen sollten oder nicht.

Alles in allem ist das Einfügen dieser Art von Daten in eine Datenbank trivial. Sie können eine Menge Dinge aus diesen Daten lernen, wenn Sie sich etwas Zeit nehmen, um diese zu studieren. Aus diesem Grund sind Datenbanken normalerweise der Weg zu gehen, da sie leicht zu manipulieren sind.

+1

Nicht, dass ich denke, das ist eine schlechte Antwort, aber ich wünschte wirklich, die Leute würden 24 Stunden warten, bevor sie eine Antwort auswählen. – Imagist

8

Google Analytics. Es sei denn Sie brauchen, um es in-house zu tun.

Rolling Ihre eigene Lösung in PHP kann so einfach oder kompliziert sein, wie Sie möchten. Sie können eine Tabelle erstellen, um die IP-Adresse (nicht immer zuverlässig), den Speicherort der Seite und ein Datum zu speichern. Auf diese Weise können Sie eindeutige Treffer für jeden Tag verfolgen. Möglicherweise möchten Sie eine Aufgabe planen, um die Anzahl der Datensätze auf eine einfache Zeile date, numOfUnique zu reduzieren.

Eine andere Methode analysiert Ihre Protokolldateien. Sie könnten dies auch alle 24 Stunden tun.

+0

Akzeptieren, vorzuziehen Verwendung von Drittanbieter-Javascript-Zähler .. Sehen Sie sich Piwik - http://piwik.org/, die ein ausgezeichneter Ersatz für Google Analytics, wenn Sie nicht mit AdWords und so. – Stojg

0

Dies ist in keinem Ihrer Fälle möglich. PHP-Anwendungen werden ausgeführt, wenn ein Benutzer etwas von ihnen anfordert, generieren sie das Ergebnis und werden dann heruntergefahren. Selbst wenn Sie die Datenbankverbindung oder -datei nicht schließen, werden sie automatisch geschlossen. Aber ich weiß nicht, warum das Öffnen der Db-Verbindung oder eine Datei zum Schreiben ein Problem wäre?

+0

Haben die PHP-Dateien in PHP keine Hintergrundverarbeitung der PHP-Laufzeit auf Apache, um die Dinge offen zu halten (deshalb sind sie Module, die auf dem Server installiert sind)? Es scheint nur übertrieben, Ressourcen zu schließen, die über Seiten/Benutzer verteilt sind. –

0

Es ist schwierig, besonders nützliche Antworten zu geben, wenn Sie nicht erwarten, wie viel Verkehr Sie erwarten (abgesehen von Jonathan Sampson's Kommentar, dass Sie besser mit Google Analytics arbeiten könnten).

dateibasierte Option:

Ich glaube nicht, es ist möglich, die Datei offen zu halten. Außerdem werden Sie wahrscheinlich mit gleichzeitigen Schreibproblemen konfrontiert, wenn Sie nicht eine Art von Sperrmechanismus verwenden.

SQLite Option:

Ich denke, dies ist wahrscheinlich der Weg zu gehen, wenn Sie noch nicht bereits eine Datenbank geöffnet bekommen. Ich bezweifle, dass das Öffnen/Schließen der db jedes Mal ein Engpass sein wird - probiere es und Profil.