Bloker IP-ranges med preg_match
Som jeg har nævnt før spammer Windows Live min Woopra-statistik. Umiddelbart er det fra IP'erne 65.55.109.xxx og 65.55.110.xxx at de mærkelige søgninger kommer fra. For at blokere disse to IP-ranges benytter jeg regular expression funktionen preg_match i PHP.
$ip = $_SERVER['REMOTE_ADDR'];
if (!preg_match("/^65.55.(109|110).(d{1,3})$/", $ip)) {
// WOOPRA KODE
}
Jeg vil i det følgende gennemgå expression-mønsteret.
1. Delimiters Expression-mønsteret, der skal tjekkes for, skal være afgrænset af to afgrænsene tegn (delimiters). I dette tilfælde /. Dette kunne også være (), {}, [] mv.
2. Start på strengen ^ benyttes til at indikere starten på strengen.
3. Almindelige tegn Almindelige tegn som bogstaver og tal kan skrives direkte ind i mønsteret. Dette gælder for tallene 65 og 55.
4. Escape specielle tegn Specielle tegn skal "undslippes" med et back-slash.
5. Enten-eller | benyttes til at vælge imellem to eller flere muligheder. I dette tilfælde tjekkes der om 109 eller 110 står som det tredje nummer i IP'en.
6. Encifret tal (digits) d indikerer at det skal være encifret tal.
7. Antal {1,3} indikerer at der skal være 1 til 3 af de, i punkt 6, encifrede tal.
8. Slut på strengen $ benyttes til at indikere slutningen på strengen.



