Homepage Besucher Ip Adressen Script

son gohan

Erfahrenes Mitglied
Hallo Leute,

ich suche ein einfaches Script das mir jeden Tag die IP Adressen meiner Website Besucher in eine Texdatei schreibt und absendet an meine Email Adresse, einmal am Tag, wenn mir dann langweillig ist und ich nichts zu tun habe kann ich nachschauen von wo überall die Leute kommen die auf meine Website schauen.

Wichtig ist das jeder Besucher, also jede IP Adresse nur einmal in die Textdatei rein soll, also muss man prüfen Datum von heute und IP Adresse ob schon vorhanden in Texdatei, wenn nein rein schreiben, wenn ja nicht nochmal rein schreiben, ja und das versenden per Email ist ja normal nicht schwer, bzw. es reicht völlig wenn nur eine Hinweis Email kommt und mir sagt das in die Texdatei was geschrieben wurde heute, dann kann ich den Link aufrufen wo die Textdatei liegt und kurz nachschauen.
 
Also Daten in eine Datei schreiben kannst du mit file_put_contents() und Daten aus einer Datei laden geht mit file_get_contents(), obwohl ich dir in diesem Fall zu file() raten würde, da da alle Daten pro Zeile in ein Array geschrieben werden. Somit kannst du jede IP-Adresse in eine Zeile schreiben und dann später direkt mit in_array() prüfen. Dann würde ich dir noch empfehlen, dass du der Datei jeweils das Datum des aktuellen Tages als Namen gibst.

Zu der Sache mit dem täglichen E-Mail-Versand: PHP kann nur eine Aktion ausführen, wenn ein PHP-Skript aufgerufen wird. Das heißt, dass du entweder noch einen Cronjob verwenden musst, oder dir nur eine E-Mail zusenden lässt, wenn jemand auf deine Seite kommt: also bekommst du auch nur eine E-Mail, wenn jemand auf deiner Seite war - auch nicht schlecht.
 
Es gibt chon erste Probleme beim erstellen der Textdatei, ich will ja jeden Tag eine Texdatei erstellen wo der Dateiname da Datum vom Tag hat, ich habe folgenden PHP COde probiert:

PHP:
<?php
$dateiname=date("d.m.Y",$time());
$datei = fopen($dateiname,"r+");
?>

Und bekomme die Fehlermeldungen:
PHP:
Notice: Undefined variable: time in C:\datei.inc on line 4
Fatal error: Function name must be a string in C:\datei.inc on line 4

Wie muss der PHP Code den richtig aussehen damit es direkt funktioniert.
Ich habe auch nichts dagegen wenn mir jemand das ganze Script zeigt wie es ein muss, Textdatei erstellen, IP Adressen in Textdatei durchuchen ob sie der IP Adresse vom aktullen Besucher gleicht, wenn nicht dann rein schreiben, wenn schon vorhanden ist nicht reinschreiben. Dann das ganze einmal mit email() versenden, wenn eine IP Adresse erfolgreich eingetragen wurde. Den Code können dann ja auch viele andere User hier benutzen für Ihre eigene Homepage.
 
So hier mal was für den ersten Schritt. Der Rest kommt dann später.
PHP:
date_default_timezone_set('Europe/Berlin');
//ich würde hier gleich die Endung TXT dranhängen
$dateiname = date("d-m-Y",time()) .".txt";

Thomas
 
Danke für den Code. Folgende Fehlermeldung müssen wir noch bearbeiten:
PHP:
Warning: fopen(12-08-2010.txt) [function.fopen]: failed to open stream: No such file or directory in C:\datei.inc on line 6
Da müssen wir ein anderen Befehl geben um die Datei zu erstellen falls nicht vorhanden, das ist auch etwas kompliziert wenn man nicht alle Befehle kennt, weil man darf auch nicht immer die Datei neu ertellen und den Inhalt löschen, sondern nur die Datei erstellen wenn die nicht vorhanden ist, aber der Ihalt sollte halt nicht gelöscht werden.
 
Schau mal ob du damit was anfangen kannst:

PHP:
<?php

date_default_timezone_set('Europe/Berlin');
$dateiname = date("d-m-Y",time()) .".txt";

$ip = $_SERVER['REMOTE_ADDR'];

if (file_exists($dateiname)) {
	$inhalt = file($dateiname, FILE_IGNORE_NEW_LINES);

	if (in_array($ip." ", $inhalt)) {
		$datei = fopen($dateiname, "a+");
		fputs($datei, $ip ."\r\n");
		fclose($datei);
	}
} else {
	$datei = fopen($dateiname, "a+");
	fputs($datei, $ip ."\r\n");
	fclose($datei);
}

?>

Bei der in_array-Funktion wird bei mir leider der Parameter "FILE_IGNORE_NEW_LINES" ingoriert. Deshalb erweitere ich die Variable $ip um ein Leerzeichen.

Aber dann scheint es zu klappen.

Thomas
 
Schau mal ob du damit was anfangen kannst:

PHP:
<?php

date_default_timezone_set('Europe/Berlin');
$dateiname = date("d-m-Y",time()) .".txt";

$ip = $_SERVER['REMOTE_ADDR'];

if (file_exists($dateiname)) {
	$inhalt = file($dateiname, FILE_IGNORE_NEW_LINES);

	if (in_array($ip." ", $inhalt)) {
		$datei = fopen($dateiname, "a+");
		fputs($datei, $ip ."\r\n");
		fclose($datei);
	}
} else {
	$datei = fopen($dateiname, "a+");
	fputs($datei, $ip ."\r\n");
	fclose($datei);
}

?>

Bei der in_array-Funktion wird bei mir leider der Parameter "FILE_IGNORE_NEW_LINES" ingoriert. Deshalb erweitere ich die Variable $ip um ein Leerzeichen.

Aber dann scheint es zu klappen.

Thomas

Das sieht schon sehr gut aus, Kompliment und vielen Dank.
Es gibt jetzt noch das Problem, wenn die IP Adresse noch nicht in der Texdatei steht, dann wird die nicht neu reingeschrieben, wenn ich die IP Adresse also manuell lösche und wieder die Seite aufrufe wird die IP Adresse nicht wieder reingeschrieben. Kann man das ändern im Code?
 
Die Suchabfrage findet wahrscheinlich die IP Adresse in der Datei, obwohl die IP Adresse nicht drin steht, weil sonst würde ie ja neu reingeschrieben.

PHP:
if (in_array($ip."\r\n", $inhalt))
    {
        $datei = fopen($dateiname, "a+");
        fputs($datei, $ip."\r\n");
        fclose($datei);
    }
 
Zurück