Oon tallane PHP noob nii tartten bannauksessa apua.
Miten mun pitäis muuttaa tota seuraavaa koodii niin että bannattu menee jonnekkin sivulle?
Koodi:
header("Location: url"); tuo iffin sisään ennen mitään tulostuksia.
Silloin ei voi tulostaa tuota tekstiä echon jälkeen, mutta tämän voi kiertää esim. maagisella ob_start() ja ob_end_flush()funktioilla (kts. php.net) tai sitten käyttämällä meta-tagia.
Eli jos vaikka oot määritelly että $banned olisi totuusarvo sille onko bannattu ip löydetty niin:
<head><meta http-equiv="refresh" Content="aikatähän; URL=<php if ($banned) { echo "bannatunurli"; } else { echo "eibannatunurli"; } ?> "></head>
Déjà vu.
IP:n bannaaminen on minusta hieman kyseenalaista, koska monella IP muuttuu joka yhteydenottokerralla ja toisilla taas voi näennäisesti olla sama IP. Mutta tsurigan ohjeilla varmaan selviät, jos näin kuitenkin päätät tehdä.
Jepp. Ja tuossa on vielä muokattavaa esim. "?"-merkki ennen ensimmäistä php-sanaa.
Ja jos kerran PHP:ta voidaan käyttää olisi suositeltavaa käyttää header() -funktiota edelleenohjaukseen.
header("Location: " . $urli);
Laita tiedostoon sekä IP että hosti. Tällöin on monta kertaa todennäköisempää, että se sama käyttäjä ei pääse sivuillesi. Tässä koodia, joka lukee ne tiedostosta:
<?php $tiedosto = "bannit.txt"; $ip = $_SERVER['REMOTE_ADDR']; $hosti = gethostbyaddr($ip); if (!file_exists($tiedosto)) { die("Tarvittavaa tiedostoa bannit.txt ei löytynyt samasta hakemistosta palvelimelta."); } $bann = file($tiedosto); for ($i = 0; $i < count($bann); $i++) { $temp = explode("|", trim($bann[$i])); if ($temp[0] == $ip or $temp[1] == $hosti) { echo("Hostinne / IP-osoitteenne on tällä sivustolla mustallalistalla. Mikäli bannaus on mielestänne aiheeton, ottakaa yhteyttä sivuston ylläpitoon sähköpostilla, josta tulee myös selvitä hostinne / IP:nne.\n"); echo("<br><br>\nHosti: " . $hosti . "<br>\nIP: " . $ip); die(); } } ?>
Ookei, eli toi näyttää ton ilmoituksen + oman hostin ja IP:n, jos käyttäjä on bannattu. Ja seuraavaksi esimerkki, mitä tulee sijoittaa tiedostoon bannit.txt:
111.111.111.111|ua123d456.elisa.omakaista.fi 222.222.222.222|fc98-d7.inet.fi 255.255.255.255|12-34.adsl.lpoy.dnainternet.fi
Taisit ymmärtää, helposti? Eli ensin käyttäjän IP-osoite, sitten erotinmerkki ( | ) ja tämän jälkeen hosti. Ei mitään välilyöntejä erotinmerkin ympärille vaan kokonaan putkeen.
Edit: Unohdin mainita, että kaikki tässä oleva koodi on päästä heitettyä, testaamatonta sellaista.
lainaus:
ämän voi kiertää esim. maagisella ob_start() ja ob_end_flush()funktioilla (kts. php.net
Ei tarvitse mennä edes php.net:iin kun löytyy koodivinkkikin Output Buffering:sta:
https://www.ohjelmointiputka.net/koodivinkit/
Miten tuohon olisi vielä mahdollisuus liittää syy mukaan miksi on bannattu.
esim. ip|hosti|syy
Meneekö näin:
$syy = explode("|","|", $syy); (eivarmaankaa :( )
Kannattaa tutkia oppaista explode-funktiota.
Se menis suunnilleen näin:
tossa olis vielä yks koodi :
<?php # Sivu jonne ohjataan jos bannattu $banni_url = "bannattu.php"; # Tiedosto joka sisältää bannatut IP:t $banned = file("bannatut.dat"); if(array_search($_SERVER["REMOTE_ADDR"],$banned) !== false) { # Ohjataan bannattu sivulle header ("Location: ". $banni_url); exit; } ?>
IP:t pitää olla sitten allekkain eri rivillä jokainen..... ainiin ja iahn koodin alkuu pitää pistää ob_start() ja loppuun ob_end_flush() niin sitten pelittää
lainaus:
koodin alkuu pitää pistää ob_start() ja loppuun ob_end_flush() niin sitten pelittää
Eikä pidä. Se riittää, että tuon pätkän laittaa aivan skriptin alkuun.
Eipä vaan mulla. Ainakaan kun pistän includella ihan alkuun ton bannauksen. Tosin ei toimi varmaankaan siks ku käytän sellasta ?sivu=etusivu scriptiä.
Aihe on jo aika vanha, joten et voi enää vastata siihen.