ip verbannen + redirecten

Status
Niet open voor verdere reacties.

headout

Terugkerende gebruiker
Lid geworden
30 okt 2000
Berichten
2.939
PHP:
<?php

$ipverbanBestand = "ipverban.dat";
// Het bestand met de IP adressen erin.
// Geef dit bestand de permissions 777.

// Na hier hoef je niks te veranderen!

if(getenv(HTTP_X_FORWARDED_FOR)) { $IPadres = getenv(HTTP_X_FORWARDED_FOR); }
elseif(getenv(HTTP_CLIENT_IP)) { $IPadres = getenv(HTTP_CLIENT_IP); }
else { $IPadres = $REMOTE_ADDR; }

$Bestand = file("$ipverbanBestand"); $Verbannen = false;
while(list($nr,$ip) = each($Bestand)) { if(strstr($IPadres,trim($ip))) { $Verbannen = true; } }

if($Verbannen) {
echo("<html>\n<body bgcolor='black'>\n<center>\n<font face=Arial size=4 color=white>
<h1>Gebanned</h1><br>\nDoor bepaalde redenen ben je gebanned van deze site!\n\n");
 <?php }
echo("</font>\n</center>\n</body>\n</html>");
exit;
}

?>
Ik heb dit php script, om een persoon het in ieder geval zo moeilijk mogelijk te maken, om een site te bezoeken.
Nu wil ik dat die persoon eigenlijk na twee seconden (oid) doorgelinkt gaat worden naar een andere site. Ik ben bekend met de manier van redirecten, indien je iedereen wil doorlinken naar een andere site.
 
dit kun je op 2 manieren doen (zo doe ik het tenminste altijd).

Mogelijkheid 1.
je kunt met de functie header() van PHP aangeven naar welke locatie geredirect moet worden. Pas echter wel op, hier is geen limiet bij in te stellen dus hij/zij wordt gelijk geredirect. Voorbeeldje:

PHP:
<?php

if($validate == 0)
{
    header("Location: jebestand.php");
}

?>

Mogelijkheid 2.
Met javascript. Heeft weliswaar weinig met php te maken maar ik gebruik deze mogelijkheid om de 2 simpele redenen dat (1) je een limiet kunt instellen en je (2) het overal kunt plaatsen, header() moet vóór alle output gezet worden omdat het HTTP info is, net als cookies en sessions, tenzij je output buffering in php.ini hebt aan staan, dan maakt het niet uit (alleen PHP versie 4 en hoger). Voorbeeldje:

PHP:
<?php

if($validate == 0)
{
     echo '<script language="JavaScript">\n';
     echo 'window.setTimeout("window.location=\'jebestand.php\'", 2000)\n';
     echo '</script>';
}

?>

2000 is het aantal miniseconden dat de uitvoer gepauzeerd moet worden. In dit geval dus 2 seconden...

Ik hoop dat het zo wat duidelijker is geworden :)
 
Laatst bewerkt:
Geplaatst door pcfixer
Ik hoop dat het zo wat duidelijker is geworden :)
Euhm, nee niet helemaal. Ik ben pas beginnend php-er, en had me helemaal niet voorgenomen om dit soort dingen te gaan doen, totdat iemand een beetje vervelend op de site ging doen.

Ik ga voor de 2e optie, aangezien ik dan nog een boodschap kan tonen voordat er doorgestuurd wordt.
Waar zet ik dan die code neer?
Eigenlijk wil ik de persoon naar een andere site doorsturen. Kan ik in plaats van bestand.php ook een url opgeven? (Als ik dat namelijk probeer wordt de url na http: weergeven als een opmerking.
PHP:
 <?php

if($validate == 0)
{
     echo '<script language="JavaScript">\n';
     echo 'window.setTimeout("window.location='http://www.domein.nl'", 2000)\n';
     echo '</script>';
}

?>
 
Volgens mij werkt dit ook wel:

if($validate == 0)
{
?>
&lt;META HTTP-EQUIV="refresh" CONTENT="5; URL=http://www.mijnpagina.nl"&gt;
&lt;?
}
?>

Waarbij het cijfer voor het aantal seconden wachten staat en de url spreekt voor zich.
 
Laatst bewerkt:
Geplaatst door chrisgeerdink
Volgens mij werkt dit ook wel:
Nu is het mij geheel onduidelijk aan het worden. Waar plaats ik deze code in de reeds door mij opgegegeven code?
 
headout,

Oh, dit wist ik niet :D. Ik vond je code er behoorlijk uitgebreid uitzien dus dacht ik dat je het al een tijdje deed :).

De code die je gebruikt komt inderdaad als comment omdat je met een enkele quote afsluit ( ' ). In mijn PHP Handleiding deel I die (hopelijk) een dezer dagen bij tips en handleidingen komt te staan kun je meer lezen over waarom dit niet kan, maar zal het in grote liijnen hier ook proberen uit te leggen.

De PHP mogelijkheden op dit forum zijn hopeloos, tekens die resulteren in HTML code zouden vervangen moeten worden door alternatieven (< wordt &amp;lt; en > wordt &amp;gt; ) maar dit gaat lang niet altijd goed, zo blijkt maar weer. Want in mijn voorbeeld had ik bij de tweede regel (echo 'window.setTimeout("window.location=.....) bij de location niet alleen maar een ' gedaan maar ook een \ ervoor. Dus \'jebestand.php\'! Waarom? Omdat ik de echo string ook open met een ' dus beschouwt PHP het ook als afsluitingsteken, TENZIJ je hem escaped met een \. Dit geldt dus ook voor een string met dubbele quotes (") waarbij je alle gewone dubbele quotes moet escapen (\").

Over waar je dit eventueel zou moeten plaatsen, nou bij het stuk code die constateerd dat de gebruiker fout bezig is. Dus bij if($Verbannen) in jouw geval...
De meta refresh tag die chrisgeerdink voorsteld is eigenlijk niet zo geschikt aangezien deze alleen gebruikt kan worden binnen de < head > tags en ik vermoed zo dat je daar al aan voorbij bent dan :D.

Duidelijker kan ik het niet uitleggen :)

[edit]
Ook weer zo'n mooi voorbeeld: &lt;head&gt; wordt hier iets te letterlijk opgevat :rolleyes: :(
[/edit]
 
Laatst bewerkt:
Geplaatst door pcfixer
Oh, dit wist ik niet :D. Ik vond je code er behoorlijk uitgebreid uitzien dus dacht ik dat je het al een tijdje deed :).
Nee, veel verder dan het "hallo wereld" kom ik op het moment nog niet (nouja, includen gaat ook nog wel).

Dat ik met die code op de proppen kom, is puur omdat er iemand loopt te klooien op mijn site.

Ik ga het eens proberen met je uitleg.

Thanks in ieder geval! :thumb:
 
Okee, dat script staat er wel tussen, zo lijkt het. Nu wordt ik niet geredirect naar een andere pagina.
PHP:
<?php

$ipverbanBestand = "ipverban.dat";
// Het bestand met de IP adressen erin.
// Geef dit bestand de permissions 777.

if(getenv(HTTP_X_FORWARDED_FOR)) { $IPadres = getenv(HTTP_X_FORWARDED_FOR); }
elseif(getenv(HTTP_CLIENT_IP)) { $IPadres = getenv(HTTP_CLIENT_IP); }
else { $IPadres = $REMOTE_ADDR; }

$Bestand = file("$ipverbanBestand"); $Verbannen = false;
while(list($nr,$ip) = each($Bestand)) { if(strstr($IPadres,trim($ip))) { $Verbannen = true; } }

if($Verbannen) {
echo("<html>\n<body bgcolor='black'>\n<center>\n<font face=Arial size=4 color=white>
<h1>Gebanned</h1><br>\nJe bent niet langer welkom op deze site!\n\n");
if($CopyrightWebmensen) { ?><br><br><a href='http://www.webmensen.nl/' target='_blank'><b style='font-family: Verdana; font-size: 8pt'>&copy; Webmensen.nl</b></a><?php }
echo("</font>\n</center>\n</body>\n</html>");
exit;
}
if($validate == 0)
{
     echo '<script language="Javascript">\n';
     echo 'window.setTimeout("window.location=\'http://www.helpmij.nl\'", 2000)\n';
     echo '</script>';
}

?>

Volgens mij zou je dus (indien een ban) na twee seconden doorgestuurd moeten worden naar helpmij.nl , maar dat geburt dus niet.
 
Zucht... Er staat een if() { } constructie om heen die zoekt naar de variabele $validate... Die staat nergens dus zal ie nooit uitgevoerd worden! Vervang dat $validate == 0 eens met $Verbannen... :rolleyes:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan