# Homepage Besucher Ip Adressen Script



## son gohan (12. August 2010)

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.


----------



## Parantatatam (12. August 2010)

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.


----------



## son gohan (12. August 2010)

Danke das hört ich gut an, das probiere ich mal.


----------



## son gohan (12. August 2010)

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
$dateiname=date("d.m.Y",$time());
$datei = fopen($dateiname,"r+");
?>
```

Und bekomme die Fehlermeldungen:

```
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.


----------



## tombe (12. August 2010)

So hier mal was für den ersten Schritt. Der Rest kommt dann später.

```
date_default_timezone_set('Europe/Berlin');
//ich würde hier gleich die Endung TXT dranhängen
$dateiname = date("d-m-Y",time()) .".txt";
```

Thomas


----------



## son gohan (12. August 2010)

Danke für den Code. Folgende Fehlermeldung müssen wir noch bearbeiten:

```
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.


----------



## zerix (12. August 2010)

Hallo,

es gibt da eine Interessante Seite
http://de3.php.net/manual/de/function.file.php

Dort findest du eigentlich alles was du brauchst. Beispielsweise wie man überprüft, ob eine Datei schon vorhanden ist. 
Brauchst du nur in dem Baum auf der linken Seite zu schauen. Alle Methoden sind eigentlich sehr sprechend bezeichnet. 

Gruß

Sascha


----------



## tombe (12. August 2010)

Schau mal ob du damit was anfangen kannst:


```
<?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


----------



## son gohan (12. August 2010)

tombe hat gesagt.:


> Schau mal ob du damit was anfangen kannst:
> 
> 
> ```
> ...


 
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?


----------



## son gohan (12. August 2010)

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.


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


----------



## tombe (12. August 2010)

Sorry war wirklich noch ein Fehler drin. Ist mir nicht aufgefallen weil ich nur mit meiner IP getestet habe ohne ein paar andere Werte in die TXT-Datei eizutragen.

Mit dieser Version geht es jetzt aber wirklich. Es ist auch eine Funktion "trimmen" dabei die die Leerzeichen aus dem Array entfernt. Dadurch klappt die Prüfung mit in_array dann auch besser.


```
<?php

function trimmen (&$wert) {
	$wert = trim($wert);
}

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);
	array_walk($inhalt, 'trimmen');

	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);

}

?>
```


----------



## son gohan (12. August 2010)

Danke und Kompliment.
Ich habe auch gerade dran geforscht und stelle hier noch weiteren Code rein wie man die Email dan verenden kann:


```
<?php

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


$ip = $_SERVER['REMOTE_ADDR'];

$Hatgeklappt=0;

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

    if (in_array($ip."\r\n", $inhalt)==false)
    {
        $datei = fopen($dateiname, "a+");
        if(fputs($datei, $ip."\r\n")>0)$Hatgeklappt=1;
        fclose($datei);
    }
}
else
{
    $datei = fopen($dateiname, "a+");
    if(fputs($datei, $ip."\r\n")>0)$Hatgeklappt=1;
    fclose($datei);
}
if($Hatgeklappt==1)
{
$extra = "From: Homepage\n";
$extra .= "Content-Type: text/html\n Content-Transfer-Encoding: 8bit\n";
$empfaenger = "meineemail@d.de";
$betreff = "Anmeldung bei";
$domain = '<a href="http://www.d.de/'.$dateiname.'">http://www.d.de/'.$dateiname.'</a>';
$text = "Hi Hi, du hast Besucher auf deine Homepage www.d.de nnst, wenn
du mir nicht glaubst schau doch nach hier ist die Textdatei wo die IP Adresse
der Besucher steht: $domain ... siehst du ich sag doch du hast ein Besucher auf deiner
Homepage gehabt, echt ich mein das jetzt im Ernst, ich mache wirklich kein Witz, glaub
mir doch einfach, komm bitte :-)";
mail($empfaenger, $betreff, $text, $extra);
echo "haha".$domain;
}
?>
```


----------



## son gohan (12. August 2010)

Jetzt gibt es noch Probleme mit Fehlermeldungen, über mein offline Server XAMPP klappt alles, aber wenn ich es hochlade auf meine Homepage bekomme ich die Meldungen:


```
Warning: fopen(12-08-2010.txt) [function.fopen]: failed to open stream: Permission denied in /var/www/vhosts/datei.inc on line 27

Warning: fputs(): supplied argument is not a valid stream resource in /var/www/vhosts/datei.inc on line 28

Warning: fclose(): supplied argument is not a valid stream resource in /var/www/vhosts/datei.inc on line 29
```

Wie kann ich die schnell beseitigen?


----------



## tombe (12. August 2010)

Hast du die Textdatei selber auch auf den Server übertragen? Dann könnte es ein Rechteproblem sein.
In diesem Fall lösch die Datei und lasse sie neu erstellen.


----------



## son gohan (12. August 2010)

tombe hat gesagt.:


> Hast du die Textdatei selber auch auf den Server übertragen? Dann könnte es ein Rechteproblem sein.
> In diesem Fall lösch die Datei und lasse sie neu erstellen.


 
Ne ich habe die Datei nicht selbst erstellt, ich habe nur den PHP Code gerade eingebaut in die Homepage und direkt die Fehlermeldung bekommen, die dürfte ja normal nicht kommen, egal ob die Datei schon besteht oder nicht?  Also da die Datei noch nicht besteht wurde wohl eben versucht die Datei zu erstellen und das klappt nicht, muss man dafür Rechte verteilen vielleicht um eine Datei zu erstellen? Oder it der Dateiname nicht erlaubt? Irgendwie sowas vermute ich.


----------



## tombe (12. August 2010)

Komisch, dann sollte es diesen Fehler eingentlich nicht geben.

Schau dir mal die CHMODE-Funktion an, damit solltest du dieses Problem aber beheben können.

Zur Not schau auch mal ob es an den Rechten für das Verzeichnis liegt in dem sich die Datei befindet.


----------



## son gohan (12. August 2010)

Es lag an den Rechten für den Ordner in dem die Homepage lag, die habe ich auf 777 geändert und nun klappts, danke für den Hinweis und Kompliment.


----------



## Dr Dau (12. August 2010)

Hallo!



tombe hat gesagt.:


> Zur Not schau auch mal ob es an den Rechten für das Verzeichnis liegt in dem sich die Datei befindet.


Da würde ich zuerst nachschauen.
Ich meine dass CHMOD 666 langen sollte..... einfach mal ausprobieren. 

Gruss Dr Dau

PS: unter Windows gibt es kein CHMOD, darum hat es auch mit XAMPP geklappt (der Server läuft allerdings unter Linux/Unix).


----------



## devil0815 (26. August 2010)

Bin gerade auf das Script von  son gohan gestoßen, super, funktioniert einwandfrei.
Hab aber trotzdem mal ne Frage: besteht evtl. die Möglichkeit außer der IP auch anzeigen zu lassen, von wann bis wann sich der Besucher auf der HP aufgehalten hat?


----------



## tombe (26. August 2010)

Du kannst mit PHP zwar ermitteln wann der Besucher die Seite "betreten" hat, aber wie lange er da war das geht zumindest nicht genau.

Angenommen du speicherst beim ersten Aufruf die Uhrzeit (ist dann die "von" Zeit) zusammen mit der IP, dann kannst du immer wenn eine andere (oder auch die selbe) Seite aufgerufen wird die aktuelle Uhrzeit speichern (ist dann die "bis" Uhrzeit"). Verweilt der Besucher dann aber 5, 10, 15 Minuten ohne etwas anzuklicken wird diese Zeit nicht mehr mitgerechnet.

Ich täte dann aber mit einer Datenbank arbeiten, ist einfacher zu verwalten.


----------



## devil0815 (26. August 2010)

Ok, vielen Dank,
das heißt also, wenn ein Besucher die HP verlässt kann man das nicht erfassen. Schade, aber wohl nicht zu ändern.


----------



## Bratkartoffel (26. August 2010)

Hallo,

könnte man hier nicht mit JavaScript eine onUnload Funktion erstellen, die per AJAX eine Anfrage wegschickt? Mit dieser Anfrage könnte man dann sicherlich bei einem Großteil der Besucher die genaue Aufenthaltszeit feststellen.

Gruß
BK


----------



## devil0815 (26. August 2010)

Ich wühle mich schon mit großer Anstrengung durch php, von Java hab ich nun nicht nur null sondern minus 100 Ahnung.
Wenn es gehen sollte, wäre ich euch für Scripte sehr dankbar

Gruß
der Devil


----------



## Bratkartoffel (26. August 2010)

Hallo,

Java *IST NICHT* JavaScript...
Auf die schnelle habe ich bei Google folgendes gefunden: http://www.ajax-community.de/javascript/4698-onunload-ajax.html

Gruß
BK


----------

