PHP Besucherzähler

Zneaf

Erfahrenes Mitglied
Hey Leute =)

ich würde gerne einen Besucherzähler auf meiner Webseite einbauen.

Er sollte die Besucher für den heutigen Tag, den gestrigen Tag, den Monat und insgesamt zählen/anzeigen können und eine IP-Sperre besitzen.

Dazu habe ich mir bereits einige Gedanken gemacht und habe auch schon in meinen Büchern nachgeforscht ;)

Dabei hat sich mir dann folgende Frage gestellt:
1. Sollte ich den PHP-Usercounter besser mit einer Datenbank oder einer Textdatei realisieren? (mit Begründung bitte)

Vielen Dank für Eure Tips ;)

LG Zneaf =)
 
Prinzipiell ist das egal.
Eine Datenbank hat den Vorteil, das alles schön aufgeräumt ist - du musst keinen Datei-Baum verwalten.
Es hat den Nachteil, das die DB laufen muss, sprich, wenn die DB nicht läuft, hast du auch keinen Counter.
 
Ich würde eher die Datenbank nehmen.

Eine Datenbank hat den Vorteil, das alles schön aufgeräumt ist
Genau, die ist wahrscheinlich auch schneller als die Textdatei. Und Statistiken und Operationen lassen sich auch bewerkstelligen.

Ein Nachteil ist eben, dass du dann ohne DB nicht auskommst, wobei es fast bei jedem Hoster eine DB gibt!
 
Ich würde eher die Datenbank nehmen.
Genau, die ist wahrscheinlich auch schneller als die Textdatei.
...

Das Filesystem ist schneller als eine Datenbank und wenn man eines der günstigeren Hosting Angebote nutzt, wo der SQL Server extern mit sehr vielen anderen Datenbank zusammen läuft, macht das wirklich sehr viel aus.

Und wenn man die ganzen Sortier- und Filterfunktionen einer Datenbank nicht braucht macht es durchaus Sinn Daten in einer Datei abzuspeichern.
 
Ich habe zufällig gerade einen Test gemacht: Cache in DB vs als Datei. Da hat die DB viel schneller abgeschnitten, naja war aber auch bei mir auf XAMPP und mit 1000 Datensätzen/Dateien.

Wenn du es als Datei speicherst, würde ich dann schon sein serialisiertes Array nehmen ([phpf]serialize[/phpf], [phpf]unserialize[/phpf]).
 
Hallo zusammen ;)

erstmal vielen Dank für eure Tips =)

Ich denke, dass ich mich für die Variante mit der DB entscheide, da ich hier die einfachere und bessere Umsetzung sehe :)

Spontan würde ich lediglich die folgenden beiden Spalten in meiner Tabelle anlegen: IP, TIMESTAMP (für Reloadsperre).

Denkt ihr, dass diese beiden Spalten für mein Ziel (oben beschrieben) genügen oder sollten es noch zusätzliche bzw. andere Spalten geben?

Habt ihr vielleicht noch nützliche Tips im Hinblick auf die Umsetzung meines Ziels?

Vielen Dank für eure Hilfe :)

LG Zneaf
 
Hey Leute =)

ich habe bereits mit dem Usercounter angefangen und versuche derzeit die IP-Adresse und einen Timestamp in der DB speichern zu lassen.

Leider klappt das ganze nicht so ganz, wie ich das möchte...

Momentan wird beim ersten Aufrufen der Seite nur die IP-Adresse in der DB gespeichert...den Timestamp speichert er mir irgendwie nicht.

Desweiteren erhalte ich folgenden Fehlercode, sobald man die Seite zum beispiel aktualisiert oder neu aufruft:
Duplicate entry 'MEINE-IP-ADRESSE' for key 1

Könnt ihr euch darauf einen Reim machen?

Hier mein bisheriger Code (usercounter.php):
PHP:
<?php

include_once("config5.php");

// Daten aus Datenbank abholen.
$sql_select = "SELECT
				   ip,
				   time
			   FROM
				   usercounter
			   WHERE
				   ip = '".(long2ip($_SERVER['REMOTE_ADDR']))."'
			   AND
				   time > '".(time()-86400)."'";

$result_select = mysql_query($sql_select,$db);

if(mysql_num_rows($result_select) > 0){
	// Besucher war schon einmal hier.
	// Daher wird ein neuer Timestamp in der DB eingetragen.

	include_once("config5.php");

    $sql_update = "UPDATE
					   usercounter
				   SET
					   time = '".time()."'
				   WHERE
					   ip = '".$_SERVER['REMOTE_ADDR']."'
				   LIMIT 1";
}else{
	// Besucher ist zum erste mal hier.
	// Daher wird sowohl die IP-Adresse, als auch ein Timestamp in der DB eingetragen.

	include_once("config5.php");
	
	$sql_insert = "INSERT INTO usercounter
				   (
				   ip, time
				   ) VALUES (
				   '". mysql_escape_string(ip2long($_SERVER['REMOTE_ADDR'])) ."',
				   '". mysql_escape_string(time()) ."'
				   )";

	$result_insert = mysql_query($sql_insert,$db) or die (mysql_error());
}

?>

Hier die Struktur meiner Datenbank (usercounter):
1. Spalte: ip <- Typ "int(10)" Attribut "unsigned" NULL "Nein"
2. Spalte: time <- Typ "timestamp" NULL "Ja" STANDARD "Null"

Vielen Dank für eure Hilfe :)

LG Zneaf
 
Zuletzt bearbeitet:
Duplicate entry 'MEINE-IP-ADRESSE' for key 1
Das Feld hat einen Unique Index, deshalb.

Nur Strings kommen in Anführungszeichen.
SQL:
INSERT INTO `usercounter`
  (`ip`,` time`)
VALUES
  ('.ip2long($_SERVER['REMOTE_ADDR']) .', NOW();

Vielleicht noch ein kleiner Tipp.
  • Wenn mehrere Personen über das selbe Gateway ins Internet gehen haben Sie alle die selbe IP.
  • Eine IP in Verbindung mit einen Zeitstempel sind personenbezogene Daten, du bist dazu verpflichtet im Impressum anzugeben das du personenbezogenen Daten erhebst und speicherst.
 
Zuletzt bearbeitet von einem Moderator:
Heyho ;)

vielen Dank für die Tips Napofis...die haben wirklich mir sehr geholfen...nun funktioniert dieser Teil auch.

Da ich einen UNIX TIMESTAMP haben wollte, hab ich die funktion time() nicht durch NOW() ersetzt. Ich hab lediglich den Datentyp in der DB auf INT abgeändert und, die Anführungszeichen wie in deinem Beispiel weggelassen.

Desweiteren habe ich bereits die Gesamtanzahl aller gezählten Besucher ausrechnen und anzeigen lassen (funktioniert sogar ^^ ).
Das habe ich mit folgendem Code erreicht:
PHP:
<?php
// Anzahl Aller gezählten User ermitteln.
$sql_gesamt = "SELECT COUNT(id) FROM usercounter";
$result_gesamt = mysql_query($sql_gesamt);
$gesamt = mysql_fetch_row($result_gesamt);

echo $gesamt[0];
?>

Nun stehe ich vor dem letzten Problem...dem Zählen der Besucher von heute und gestern.

Hab schon etwas herumgebastelt, aber leider noch kein richtiges Ergebnis erhalten.
Hat jemand eine Idee, wie man ausrechnen könnte, wieviele Leute heute und gestern die Seite aufgerufen haben?

Über eure Hilfe würde ich mich rießig freuen =)

LG Zneaf
 
Zurück