HILFE!!!! IP-Counter in PHP geht nicht
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
adresse
befehlen
beitrag
count
counter
date
datei
fehler
fehlermeldung
funktion
inhalt
manual
quelltext
rhrer
schleifen
script
tutorial
vielen dank
wenigsten
zeile
-
Ich habe in meine Seite einen IP-Counter eingebaut, der bis vor kurzem noch funktionierte, nur nachdem ich mit diesem einen kleinen anderen Versuch unternommen habe, geht er irgendwie nicht mehr.
Der Quelltext m?sste eigentlich der sein, wie ich ihn am Anfang hatte.
Die 3 Probleme liegen jetzt darin, das er er eine andere IP-ausgibt, als die, die ich besitze.
Au?erdem z?hlt dieser Counter auch einige Schritte hoch, obwohl ich gar nicht online war.
Und wieso zeigt mir www.meineip.de eine andere IP, als die in meinem Counter?
Es muss also am Quelltext liegen:
<? $ip = getenv ("REMOTE_ADDR"); $filename = "BesucherSeite.txt" ; $file = file($filename); $datum = date("d.m.Y"); $zeit = date("H:i"); $file = array_unique($file); $hits = count($file); echo $hits; $fd = fopen ($filename , "r"); $fstring = fread ($fd , filesize ($filename)) ; fclose($fd) ; $fd = fopen ($filename , "w"); $ipname = getenv ("REMOTE_ADDR"); $fcounted = $fstring."\n".$hits.". ".getenv ("REMOTE_ADDR")." ".$datum." ".$zeit; $fout= fwrite ($fd , $fcounted ); fclose($fd); ?>
danach nat?rlich noch includieren mit:
<?php include ("CounterSeite.php"); ?>
WER KANN MIR HELFEN?
Vielen Dank schon im Voraus
mfg
zocca
Beitrag ge?ndert am 4.05.2006 12:16 von zocca -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Du machst Fehler, den viele Anf?nger machen: Die Datei wird zweimal im gleichen Script ge?ffnet. Dadurch kann es passieren, dass sich der Inhalt der Datei beim Schreibvorgang (zweites ?ffnen) ge?ndert hat. Au?erdem benutzt du kein File-Locking, so dass eine andere Instanz deines Scriptes, die etwa im gleichen Zeitraum l?uft, ebenfalls ohne Probleme den Inhalt der Counter-Datei ?ndern kann.
Du solltest dich also mal mit folgenden PHP-Befehlen etwas genauer befassen:
fopen() mit Open-Mode "r+":
http://de.php.net/manual/de/function.fopen.php
flock():
http://de.php.net/manual/de/function.flock.php
Und zur Not tut es auch mein Counter-Tutorial, da wird der Einsatz dieser Befehle (hoffentlich) verst?ndlich erl?utert:
http://alopex.pyrokar.lima-city.de/index.php/PHP/Hitcounter.html -
Vielen Dank f?r deine Hilfe!
Kam da jetzt ausversehen auf den Spammeldeknopf -
DAS WAR ABSOLUT KEINE ABSICHT, SORRY!
ALSO BITTE: DAS IST KEIN SPAM!!!
ENTSCHULDIGUNG!!!!!!!!!!!!!!
Nochmal zur Frage:
Da ich nicht so ein PHP-Fachmann bin, wieso wird dann eine andere IP-Adresse bei meineip.de bei mir angezeigt, als die, die ich wirklich habe UND wieso z?hlt mein Z?hler, wenn ich sogar offline bin?
Liegt das auch irgendwo am Quellcode an irgend einer Stelle?
Vielleicht kann ganz kurz jemand auf meiner Seite vorbei schauen, dann w??te ich wenigstens, das er andere IPs auch erkennt (gebt mal nen G?stebuch-Eintrag bitte ab, dann wei? ich das auch
zocca.xardas.lima-city.de
Thanks a lot
Beitrag ge?ndert am 4.05.2006 12:58 von zocca
Beitrag ge?ndert am 4.05.2006 13:01 von zocca -
So...
1 Woche sp?ter und ich bin immer noch nicht schlauer geworden!
Wieso wird hat jeder, der meine Homepage die selbe IP "193.201.XX.XX". Das wird auch angezeigt, wenn ich auf die Seite gehe. Also einfach bei jedem!
Wieso???? -
Der einzige, der das rausfinden kann, bist du. Denn du hast Kontrolle ?ber das Script. Ich habe keine Lust, die ungetesteten Scripts anderer auf meinen Server zu laden, zu schauen, was sie ausgeben und dann nach Fehlern zu suchen -- und das ganze ohne Gegenleistung^^. Es gen?gt mir, wenn ich das bei meinen eigenen Scripts machen muss.
Daher mach folgendes:
1. Informier dich, wie man mit PHP Fehler finden kann. Zum Anfang solltest du dir die Funktionen var_dump() und print_r() anschauen. Mit denen kannst du dir die Inhalte von Variablen anzeigen lassen.
http://de.php.net/manual/de/function.var-dump.php
2. Ich schreibe an den Anfang meiner Scripts mimmer folgendes:
error_reporting( E_ALL | ( defined('E_STRICT') ? E_STRICT : 0 ) );
@ini_set('display_startup_errors', TRUE);
@ini_set('display_errors', TRUE);
@ini_set('html_errors', TRUE);
Das sorgt daf?r, dass alle Meldungen, die PHP normalerweise unterdr?ckt, im Browser angezeigt werden. Ist dein Script sauber, dann kommen trotz dieser Befehle keine Fehlermeldungen. Wenn doch, dann musst du nacharbeiten. Die Fehlermeldungen/Warnungen und Notices sind zwar in Englisch, zeigen aber immer die Zeile an, wo der Fehler bemerkt wurde. Dort kannst du dann anfangen zu suchen.
3. Du benutzt sehr wunderliche Techniken, um an die Umgebungsvariablen zu kommen. Die "REMOTE_ADDR" holt man sich in modernem PHP aus der super-gobalen Variablen $_SERVER['REMOTE_ADDR'].
4. Es gibt im WWW so genannte Proxies. Das sind Server, die erscheinen auf Browserseite wie der eigentliche Webserver und auf Webserverseite wie der Browser. Diese Proxies kann man mit normalen PHP-Mitteln nicht immer erkennen. Aber sie ?bermitteln ihre IP-Adresse anstatt der "IP-Adresse des Browsers".
Ich hab mich mal probeweise in dein GB eingetragen. Kannst ja mal nachschauen und kucken ob's dir was n?tzt.
http://zocca.xardas.lima-city.de/
-
Nimm doch einfach meinen COunter:
http://www.lima-city.de/tutorials.php?m=show&id=2047 -
hi, auf Xardas funktioniert zurzeit getenv('REMOTE_ADDR') icht richtig, es wird die IP des Server anezeigt, aus welchem grund auch immer, Ticket ist schon geschrieben. Allerdings kannst du diese Funktion benutzen, oder selber eine schreiben, so musst du nicht alles um?ndern, wenn es wieder funktionieren sollte:
function ip() { $ip1 = getenv('HTTP_X_FORWARDED_FOR'); $ip2 = $_SERVER["REMOTE_ADDR"]; if($ip1 == "") { $ip = $ip2; }else{ $ip = $ip1; } return $ip; }
edit
ist es beabsichtigt, das nicht ?berpr?ft wird, ob die IP in einer bestimmten Zeit schon einmal gez?hlt wurde?
edit2
hier mal ein code mit reloadsperre, hab deinen ein bisschen ver?ndert:
function ip() { // funktion f?r die richtige ip auf xardas $ip1 = getenv('HTTP_X_FORWARDED_FOR'); $ip2 = $_SERVER["REMOTE_ADDR"]; if($ip1 == "") { $ip = $ip2; }else{ $ip = $ip1; } return $ip; } $ip = getenv ("REMOTE_ADDR"); $filename = "ct.log" ; $file = file($filename); $datum = date("d.m.Y"); $zeit = date("H:i"); $file = array_unique($file); $hits = count($file); echo $hits; $fd = fopen ($filename , "r"); $fstring = fread ($fd , filesize ($filename)) ; fclose($fd) ; $file = fopen($filename, "r"); // datei zum ?berpr?fen ?ffnen $besucht = 0; while($zeile = fgets($file)) { // schleife, um jede zeile zu ?berpr?fen $teile = explode(" ", $zeile); // zeile zerlegen if($teile[1] == ip() && time()-3600 <= $teile[4]) { // ?berprf?fen, ob IP innerhalb der letzten stunde eingetragen wurde $besucht = 1; break; // schleife beenden } } if($besucht == 0) { // wenn noch nicht besucht wird ausgef?hrt $fd = fopen ($filename , "w"); $ipname = getenv ("REMOTE_ADDR"); $fcounted = $fstring."\n".$hits.". ".getenv ("REMOTE_ADDR")." ".$datum." ".$zeit." ".time(); $fout= fwrite ($fd , $fcounted ); fclose($fd); }
Beitrag ge?ndert am 11.05.2006 08:01 von ruehrer -
wieso machst du deinen counter nicht einfach mit cookies??
wenn der counter lokal bei dir im netzwerk oder sogar auf deinem pc l?uft ist ja klar dass der deine lokale ip (192.168.xxx.xxx) wenn nicht sogar 127.0.0.1 anzeigt.
Die Ip die du im Internet hast ist die IP deines DSL-Routers -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage