Ajattelin vielä tehdä sivulleni ip-osoitteen eston osaan tehdä sen mutta ajattelin että voisin laittaa siihen vielä perään syyn sitä en taas osaa tehdä :D
koodini on tälläinen:
foreach(file('admin/ipt.txt') as $ip) { if (trim($ip) == $_SERVER['REMOTE_ADDR']) exit('Sinun IP-osoitteesi on estetty tälle sivulle!'); }
Ja ipt.txt tiedostossa on tallennettu tälläin ipt ja syyt:
35.658.247.35|tässä on syy|
Antakaa neuvoja miten kannattaisia toimia älkää antako suoraa koodia (1.vastoin putkan sääntöjä 2. haluan oppia)
Tutustu Explode- tai Split-funktioon. Jälkimmäinen | on silloin turha. (PHP-manuskasta taikka Putkan kielihakemistosta löytyy.)
ok kiitos sinulle..
$file = file("admin/ipt.txt"); $i = 0; foreach ($file as $i => $value) { $tiedot = explode("|", $value); if ($tiedot[0] == $_SERVER['REMOTE_ADDR']) { echo 'Sinun IP-osoitteesi on estetty tälle sivulle!<br />Syy estämiseen: ' . $tiedot[1]; die(); } $i++; }
sain tälläisen kehiteltyä mutta tässä on pieni ongelma se ei reagoit admin/ipt.txt ekalla rivillä sijaitsevaan ip:seen eli vaikka tiedostossa on se ip se ei ole bannatta :s
Mikä tuon muuttujan $i tarkoitus on? Foreach käy kaikki alkiot lävitse, et tarvitse mitään indeksimuuttujaa.
Eli koodin
if ($file = @file("admin/ipt.txt")) { foreach ($file as $value) { $tiedot = explode("|", $value); $ip = trim($tiedot[0]); $syy = trim($tiedot[1]); if ($ip == $_SERVER['REMOTE_ADDR']) exit("Sinun IP-osoitteesi on estetty tälle sivulle!<br />Syy estämiseen: $syy"; } }
pitäisi kyllä mielestäni toimia.
Mitään ei tarvitse luultavastikaan trimmata, kun rivinvaihto on kolmannessa $tiedot indeksissä (eli $tiedot[2] = rivinvaihto).
tuokaan ei ota sitä ekaa riviä :s
EDIT: sain toimimaan.. kiitos...
Cc kirjoitti:
EDIT: sain toimimaan.. kiitos...
Olisi tietysti kohteliasta kertoa, että mikä oli vikana. Nimittäin sitten kun joku käyttää tuota putkan hakua ongelmissaan, niin tulee vain ketjuja joissa ei ole oikeaa ratkaisua :P
Tuossahan se jo ylempänä on, mutta laitetaan vielä väreillä.
Ratkaisu:
Bannaaminen IP:n perusteella
ipe kirjoitti:
Cc kirjoitti:
EDIT: sain toimimaan.. kiitos...
Olisi tietysti kohteliasta kertoa, että mikä oli vikana. Nimittäin sitten kun joku käyttää tuota putkan hakua ongelmissaan, niin tulee vain ketjuja joissa ei ole oikeaa ratkaisua :P
Se .txt tiedosto jumitti jotain minulla kun poistin sen ja tein uudestaan niin toimii jälleen...
JTS kirjoitti:
Mikä tuon muuttujan $i tarkoitus on? Foreach käy kaikki alkiot lävitse, et tarvitse mitään indeksimuuttujaa.
Jos taulukon arvoilla olisi avaimet (key), niin ne näkyisivät foreach-blokin sisällä tuossa $i-muuttujassa. file() -funktion palauttamassa niitä toki ei ole, jolloin tuo on täysin turha.
Onhan niillä avaimet, hankala niitä muuten olisi sieltä taulukosta muuten poimia ;).
tsuriga kirjoitti:
Mitään ei tarvitse luultavastikaan trimmata, kun rivinvaihto on kolmannessa $tiedot indeksissä (eli $tiedot[2] = rivinvaihto).
Itsellä vain tapana trimmailla kaikki (muiden) ihmisten syötteet, vaikka se ei niin välttämätöntä olisikaan. Esimerkiksi ei ole kovin vaikeaa epähuomiossa tehdä tuo ipt.txt muotoon
192.168.0.1 | Tuhma DHCP!
Trimmaa ne syötteet sinne tiedostoon laittaessa niin ei aina sieltä hakiessa tarvitse. Ja jos systeemi ei toimi, niin sen huomaa testeissä, nuo IP:t kirjoittaa tuonne kuitenkin luultavasti kone valmiiksi annetuilla säännöillä "$ip|$syy|". Kumpi lienee tehokkaampaa, kirjoittaa ylimääräinen | tiedostoon vai trimmata jokaisen rivin viimeinen alkio?
tsuriga kirjoitti:
Trimmaa ne syötteet sinne tiedostoon laittaessa niin ei aina sieltä hakiessa tarvitse. Ja jos systeemi ei toimi, niin sen huomaa testeissä, nuo IP:t kirjoittaa tuonne kuitenkin luultavasti kone valmiiksi annetuilla säännöillä "$ip|$syy|". Kumpi lienee tehokkaampaa, kirjoittaa ylimääräinen | tiedostoon vai trimmata jokaisen rivin viimeinen alkio?
Itse oletin että ne syötetään käsin... Ja jos kone hoitaa tuon niin vieläkin tehokkaampaa lienee vetäistä kaikki samalle riville, ja katsoa parillisuuden perusteella IP-syy parit (pilknus) ;)
Helpompaa on varmaan http:n kautta päivittää tuota bannitiedostoa, tai automatisoida sen päivitys jotenkin. Juu voi olla tehokkaampaa, tosin voi olla myös vieläkin tehokkaampaa pyörittää noita kevyessä tietokannassa. Hainkin lähinnä samanlaisuutta alkuperäiseen yritykseen selkeyden vuoksi. Noinhan se on opetettu myös Putkan oppaassa.
Aihe on jo aika vanha, joten et voi enää vastata siihen.