PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit globaler Variable


powerbulls
26.03.2004, 19:08:27
Folgendes Script habe ich geschrieben und es funktioniert perfekt, wenn ich die "global" weglasse und die Variable direkt in die Funktion setzte, wenns aber wie nachfolgend angegeben ist, sagt er immer, dies sei nicht ein "valid path", aber der stimmt ja, denn wenn ichs wie gesagt direkt in die funktion mit $ipdatei = "clicks/ip.txt"; einbette, dann gehts. Hoffe, mir kann jemand helfen, ich verzweifle gerade! Siehe Zeile 2 und 10!
Code:
--------------------------------------------------------------------
<?
$ipdatei = "clicks/ip.txt";//der relative Pfad zur Datei ip.txt

//und hier gehts dann auch schon los
$aktIP = $_SERVER['REMOTE_ADDR']; //IP abfragen
checkip($aktIP); //Aufruf Funktion checkip

//hier kommt die Funktion zum IP-Check
function checkip($ip)
{
global $ipdatei;
$dauer = 5; //Dauer in Minuten angeben für die Sperre
$exists = FALSE;
$timestamp = time();
$file = file($ipdatei);
$ipdatei = fopen($ipdatei,"w+");
foreach ($file as $line)
{
$exp_line = explode("|", $line);
if ($exp_line[0] == $ip) //wenn die Zeile der Schleife die IP beinhaltet
{
$exists = TRUE; //hier wird der ein marker auf true gesetzt, da die IP schon vorkommt
if(($exp_line[1]+ 60*$dauer) < $timestamp) // IP ist nicht mehr gesperrt
{
fputs($ipdatei, "$exp_line[0]|$timestampn"); //neue Daten für diese IP werden geschrieben...
zaehlen(); //...und der Zähler für die Statistik wird aufgerufen
}
else //IP ist noch gesperrt
{
fputs($ipdatei, "$line");
}
}
else //wenn die Zeile der Schleife die IP nicht beinhaltet...
{
if(($exp_line[1]+ 60*$dauer) > $timestamp) //und noch eine Sperre für diese Zeile existiert...
{
fputs($ipdatei, "$line"); //wird sie nochmal gleich reingeschrieben, ansonsten wird sie gelöscht!
}
}
}
if ($exists == FALSE) //hier wird der oben gesetzte Marker abgefragt, wenn er nicht auf TRUE ist, ist die IP neu und wird eingefügt
{
fputs($ipdatei, "$ip|$timestampn"); //neue Zeile für neue IP wird geschrieben
zaehlen(); //...und der Zähler für die Statistik wird aufgerufen
}
fclose($ipdatei);
}

und hier geht dann mit anderem weiter!


Danke für Eure Zeit!

Torben

powerbulls
26.03.2004, 19:38:48
Vielleicht sollte ich noch sagen, daß ich diese Datei include in ein file, dass zur ipdatei.txt den relativen Pfad clicks/ip.txt hat!

Torben

powerbulls
26.03.2004, 21:43:23
OK, vielleicht hilfts weiter, ich bekomme dann folgende Fehlermeldungen:
-----
Warning: Invalid argument supplied for foreach() in /home/www/web124/html/down/clicks/clicks.php on line 16

Warning: fputs(): supplied argument is not a valid stream resource in /home/www/web124/html/down/clicks/clicks.php on line 42

Warning: fclose(): supplied argument is not a valid stream resource in /home/www/web124/html/down/clicks/clicks.php on line 45

-----
Und wenn ich wie gesagt, direkt einbaue, was dann so aussieht, gehts einwandfrei:
-----
<?
//und hier gehts dann auch schon los
$aktIP = $_SERVER['REMOTE_ADDR']; //IP abfragen
checkip($aktIP); //Aufruf Funktion checkip

//hier kommt die Funktion zum IP-Check

function checkip($ip)
{
$ipdatei = "clicks/ip.txt"; //relativer Pfad von der Seite, wo du es einsetzt, bis zur ip.txt
$dauer = 5; //Minuten, die eine IP beim Counter gesperrt wird
$exists = FALSE;
$timestamp = time();
$file = file($ipdatei);
$ipdatei = fopen($ipdatei,"w+");
foreach ($file as $line)

usw usw usw
-----

Hilft jemand?

Habe ja auch schon woander auf die selbe Art mit global gearbeitet und da gings einwandfrei!

Torben

powerbulls
27.03.2004, 12:16:37
Hmm, ist die Frage und die Lösung so einfach, daß mir keiner helfen will, oer weiß wirklich keiner, was hier los ist. Bräuchte wirklich Hilfe, komme selbst nicht drauf, warum das buggt!

Torben

powerbulls
27.03.2004, 13:43:30
OK, hat sich erledigt, irgendwie buggte da irgendwas, vielleicht ein problem mit meinem cache, keine ahnung, auf jeden Fall hab ichs genauso deklariert wie gestern und plötzlich gehts...?

Naja, Problem nicht erkannt und dennoch gebannt!

Danke an die, die diesen Thread gelesen und drübernachgedacht haben!

Torben