Homepage selbermachen 7.852 Themen, 35.619 Beiträge

totaler PHP-Anfänger in Schwerigkeiten. IP Sperre / Reloadsperre

PHP-Anfänger / 16 Antworten / Baumansicht Nickles

Hallo


ich fange gerade an mich mit PHP zu beschäftigen und besitze deshalb noch keine Erfahrungen und Kenntnisse darin. Trotzdem habe ich versucht mir ein (klitze)kleines Schript zu schreiben welches den Namen des Browser (Name, Version) des jeweiligen Surfers in eine Textdatei schreibt. Wie es mir gelungen (gut? / schlecht?) ist, entscheidet selbst. Bin für jeden Ratschlag dankbar. Hier nun der Code dazu:


$datei= "browser.txt" ;


$fp= fopen ($datei, "w");


fwrite ($fp, "$HTTP_USER_AGENT");


fclose ($fp);


Jetzt möchte ich noch eine, von mir, einstellbare IP-Sperre (Reloadsperre) einbauen so, dass in einer, von mir festgelegten Zeit die gleiche IP nur einmal gezählt wird und somit auch nur der Browser (Name, Version). Leider habe ich keinen Schimmer wie ich das bewerkstelligen soll. Könnt ihr mir bitte helfen. Vielen Dank

bei Antwort benachrichtigen
PHP-Anfänger Nachtrag zu: „totaler PHP-Anfänger in Schwerigkeiten. IP Sperre / Reloadsperre“
Optionen

Ist wohl mit dem Code etwas schief gelaufen. Hier nochmal, der Code, im Klartext:

$datei= "browser.txt";
$fp= fopen ($datei, "w");
fwrite ($fp, "$HTTP_USER_AGENT");
fclose ($fp);

bei Antwort benachrichtigen
Heinz_Malcher PHP-Anfänger „totaler PHP-Anfänger in Schwerigkeiten. IP Sperre / Reloadsperre“
Optionen

wenn du willst, dass die IP nur einmal gezählt wird, würde ich sie in eine separate textdatei schreiben und dann einfach mit der aktuellen vergleichen:

if (0 == 0)

{
$filename = "lastip.txt";
$fp = fopen ($filename, "r");
$inhalt = fread ($fp, filesize ($filename));
$vergleich = strcmp ($inhalt, $REMOTE_ADDR);



}
else
{
$filename = "lastip.txt";
$fp = fopen ("$filename", "w+");
$schreiben_ip = fwrite ($fp, $REMOTE_ADDR);
fclose ($fp);

}


?>

bei Antwort benachrichtigen
Borlander Heinz_Malcher „wenn du willst, dass die IP nur einmal gezählt wird, würde ich sie in eine...“
Optionen
if (0 == 0)
Sehr interessante Bedingung ;-)
bei Antwort benachrichtigen
Zaphod Borlander „ Sehr interessante Bedingung - “
Optionen

.... allerdings - da sollte Heinz mal erklären, wozu die if-Schleife eigentlich dient.
*IMHO* kann die einfach weg. Oder ging es darum, den Code kryptischer zu gestalten?
Solche "immer wahren" Bedingungen machen nur in while-Schleifen manchmal Sinn, wenn die Abbruchbedingung in der Schleife steht ;-)
Have fun,
Z.

bei Antwort benachrichtigen
Heinz_Malcher Zaphod „.... allerdings - da sollte Heinz mal erklären, wozu die if-Schleife eigentlich...“
Optionen

sorry, das script war aus einer anderem umgebung, in der die schleife sein musste, da sich sonst was überschnitt.

kann man natürilch hier rausnehmen*g

bei Antwort benachrichtigen
xafford Heinz_Malcher „sinnlose schleife“
Optionen

...in der sich sonst was überschnitt...
?
ähm...der code würde mich mal brennend interessieren, in dem eine if(1==1) bedingung sinn macht ;o)

Pauschalurteile sind immer falsch!!!
bei Antwort benachrichtigen
Zaphod xafford „sinnlose schleife“
Optionen

... kann ich mir auch nicht vorstellen ....
Have fun,
Z.

bei Antwort benachrichtigen
xafford PHP-Anfänger „totaler PHP-Anfänger in Schwerigkeiten. IP Sperre / Reloadsperre“
Optionen

eine wirklich vernünftige reloadsperre erreichst du nur mit sessions, da z.b. ein nicht zu vernachlässigender teil der t-onlineuser einen der t-online-proxys nutzen.
noch ein kleiner tipp...damit dir die datei nicht volläuft würde ich gleich in dnie datei statistisch ausgewertete daten schreiben, absolute zahlen schreibt meist schon die server-log (sofern du darauf zugriff hast).

Pauschalurteile sind immer falsch!!!
bei Antwort benachrichtigen
PHP-Anfänger xafford „eine wirklich vernünftige reloadsperre erreichst du nur mit sessions, da z.b....“
Optionen

Hallo xafford,
Sorry, aber ich habe da mal ne blöde Frage.

> eine wirklich vernünftige reloadsperre erreichst du nur mit sessions, da z.b. ein nicht zu vernachlässigender teil der t-onlineuser einen der t-online-proxys nutzen.

Was meinst Du genau mit sessions. Habe in meinen Handbuch dazu keine Erklärung gefunden. Wäre nett von Dir wenn Du mir eine Erklärung geben könntest, wenn möglich mit einem reelen Beispiel.
thanks

bei Antwort benachrichtigen
xafford PHP-Anfänger „Hallo xafford, Sorry, aber ich habe da mal ne blöde Frage. eine wirklich...“
Optionen

eine session richtet eine eindeutige sitzung zwischen den browser des clients und dem server ein. über eine session kannst du im allgemeinen variablen zwischen browser und server für die dauer der sitzung verfügbar halten. so lange der browser offen ist wird die session zwischen ihm und dem server offen gehalten und somit hat die sitzung immer eine eindeutige id , anhand der du eine reloadsperre erreichen kannst. in etwa sollte dies dann so aussehen:

if(!isset($clientid)||!isset($clientagent)||!isset($sent))
{
session_start();
$clientid=$REMOTE_ADDR;
$clientagent=$HTTP_USER_AGENT;
$sent=0;
session_register("clientid","clientagent","sent");
}
else
{
session_start();
if($sent==0)
{
hier deine funktion die den eintrag in deine log vornimmt
$sent=1;
}
}

so gehst du sicher, daß jeder besucher innerhalb einer sitzung nur einmal erfasst wird. im prinzip brauchst du eigentlich auch nur die variable sent zu registrieren, da du REMOTE_ADDR und HTTP_USER_AGENT auch in deiner funktion auslesen kannst, man könnte mit der kombination der beiden aber noch einen eindeutigeren schlüssel erstellen lassen und weitere statistische daten erfassen.

Pauschalurteile sind immer falsch!!!
bei Antwort benachrichtigen
Heinz_Malcher PHP-Anfänger „totaler PHP-Anfänger in Schwerigkeiten. IP Sperre / Reloadsperre“
Optionen

<?php



if ($eintragen)

{

if (0 == 0)


{
$filename = "lastip.txt";
$fp = fopen ($filename, "r");
$inhalt = fread ($fp, filesize ($filename));
$vergleich = strcmp ($inhalt, $REMOTE_ADDR);

if ($vergleich == 0)

{

echo "Sie haben bereits einen Eintrag geschrieben.<br>Sie dürfen aus technischen Gründen innerhalb von 30 Minuten nur einen Gästebucheintrag schreiben.";

fclose ($fp);
}

else

{

if (empty($name) || empty($text))

{
echo "Bitte füllen Sie das Formular vollständig aus";
}


else

{ $_name = "<b>Name:</b> $name<br>";
$_email = "<b>E-Mail:</b> <a href='mailto:$email'>$email</a><br>";
$_text = "<b>Text:</b> ";
$_text_ = str_replace("<"," ",$text);
$_break = "<br>";
$datum = date("H.i.s");


$filename = "inhalt.txt";

$fp = fopen ("$filename", "a");

$schreiben_name = fwrite ($fp, $_name);
$schreiben_datum = fwrite ($fp, $datum);
$schreiben_break = fwrite ($fp, $_break);
$schreiben_email = fwrite ($fp, $_email);
$schreiben_text = fwrite ($fp, $_text);
$schreiben_text_ = fwrite ($fp, $_text_);
$schreiben_break = fwrite ($fp, $_break);
$schreiben_break = fwrite ($fp, $_break);



fclose ($fp);

$filename = "lastip.txt";
$fp = fopen ("$filename", "w+");
$schreiben_ip = fwrite ($fp, $REMOTE_ADDR);
fclose ($fp);
}



}


}



}


print'<form action="gaestebuch_eintragen.php4" method="post">';
print'Ihr Name: <input name="name" size="20" type="text"><br>';
print'Ihre E-Mail Adresse: <input name="email" size="20" type="text"><br>';
print'<textarea name=text cols=50 rows=10></textarea><br>';
print'<input name="eintragen" type="submit" value="Eintragen">';
print'<br><br><br>';


$filename = "inhalt.txt";
$fp = fopen ("$filename", "r");
$inhalt = fread ($fp, filesize ($filename));

echo "$inhalt";

fclose ($fp);







?>

Da, das script stammt noch aus meinen anfängen, mittlerweile weiss sogar ich, dass die schleife unsinn ist, aber damit ihr was zum lachen habt

daaaa :-)

bei Antwort benachrichtigen
xafford Heinz_Malcher „@ Lästermäuler Zaphod & Xafford“
Optionen

hm...nuja, ich will ja nicht unken, aber der code läuft genau so, als wenn du die if-bedingung ganz weg lässt, nur eben etwas schneller ;o)

Pauschalurteile sind immer falsch!!!
bei Antwort benachrichtigen
PHP-Anfänger Heinz_Malcher „@ Lästermäuler Zaphod & Xafford“
Optionen

Hallo Heinz_Malcher,

> echo "Bitte füllen Sie das Formular vollständig aus";

An welcher Stelle (welchen Abschnitt) in deinen obigen PHP-Script werden die Felder überprüft ob sie ausgefüllt sind oder nicht?

bei Antwort benachrichtigen
Zaphod Heinz_Malcher „@ Lästermäuler Zaphod & Xafford“
Optionen

... warum schmeisst du sie dann nicht einfach raus ;-) 0 wird immer 0 sein, dann ist die Bedingug immer wahr und er geht auf jeden Fall rein - ergo:
die Schleife ist sinnlos ;-).
Die Überprüfung kostet allerdings Rechenzeit ;-P
Have fun,
Z.

bei Antwort benachrichtigen
Dumistvieh PHP-Anfänger „totaler PHP-Anfänger in Schwerigkeiten. IP Sperre / Reloadsperre“
Optionen

Hmm, was ist wenn der nächste reinzufällig dieselbe Rechner/Browserkonfig hat mit derselben IP (nämlich die vom Proxy)? Dieser wird dann zu Unrecht gebannt. Überträgt der T-Online Proxy eigentlich die "wahre" IP in HTTP_X_FORWARDED_FOR? Leider bin ich net beim rosa Riesen, daher frage ich. Denn die muß definitiv (zumindest während der Einwahl) eindeutig sein.

Gruß
Dumistvieh

--- wie immer: ALLE ANGABEN OHNE GEWEHR ÄH GEWÄHR!
bei Antwort benachrichtigen
Heinz_Malcher PHP-Anfänger „totaler PHP-Anfänger in Schwerigkeiten. IP Sperre / Reloadsperre“
Optionen

ok ok, überredet, schleife eben raus

@PHP Anfänger:

if (empty($name) || empty($text)) hier wird geprüft

bei Antwort benachrichtigen