In_array help

di il
3 risposte

In_array help

Ciao sto creando un benner ip ma ho qualche problema...
Il codice funzionante è:
<?php
$banned_ip = array ("ip1","ip2","ip3");
$ip = $_SERVER['REMOTE_ADDR'];
if (in_array ($ip,$banned_ip)) {
die ('<body bgcolor="black"><p align="center"><img src="Files/IPBAN.jpg" width="700" height="300"></p>
<marquee align="middle" scrollamount="1" height="200" width="100%" direction="up"scrolldelay="1"><font color="red" size=10><p align="center">ban by admin<br><b>=KiNg_P@Y€=</b></font></p></marquee>');
}
else
{
}
?>
Io invece voglio appoggiarmi a un .txt di nome IPBans.txt
all'interno dell'ip bans c'è la stringa "ip1","ip2","ip3"...
Ma se inserisco questo codice non va come mai???
(cioè lo stesso ma ce va a recuperare la stringa in IPBans.txt)
<?php
$filename = "IPBans.txt";
$handle = fopen($filename, "r");
$contents = fread($handle, filesize($filename));
$banned_ip = array ($contents);
$ip = $_SERVER['REMOTE_ADDR'];
if (in_array ($ip,$banned_ip)) {
die ('<body bgcolor="black"><p align="center"><img src="Files/IPBAN.jpg" width="700" height="300"></p>
<marquee align="middle" scrollamount="1" height="200" width="100%" direction="up"scrolldelay="1"><font color="red" size=10><p align="center">BANNED BY ADMIN<br><b>=KiNg_P@Y€=</b></font></p></marquee>');
}
else
{
}
?>
Mi dite cosa sbaglio?

3 Risposte

  • Re: In_array help

    =KING_PAIC= ha scritto:


    Io ... voglio appoggiarmi a un .txt di nome IPBans.txt
    all'interno dell'ip bans c'è la stringa "ip1","ip2","ip3"...
    $filename = "IPBans.txt";
    $handle = fopen($filename, "r");
    $contents = fread($handle, filesize($filename));
    $banned_ip = array ($contents);
    $ip = $_SERVER['REMOTE_ADDR'];
    if (in_array ($ip,$banned_ip)) ...
    Mi dite cosa sbaglio?
    Ciao, l'errore si trova nella formazione dell'array chiamato $banned_ip.
    Il tuo intento è quello di aprire il file seguente
    IPBans.txt
    "ip1","ip2","ip3"
    e arrivare al bivio con l'array seguente:
    $banned_ip = array ( "ip1","ip2","ip3");
    ovvero con una tupla di 3 elementi.
    Se seguiamo attentamente il tuo codice, invece, ci ritroviamo con un array formato diversamente:
    $banned_ip = array($contents); // OVVERO: array ( ' "ip2","ip2","ip3" '(stringa) )
    ovvero contenente UN SINGOLO elemento stringa con gli ip concatenati, esattamente come sono scritti nel file di testo.
    Quello che ti serve è il trasformare la stringa presente nel .txt in un array, oppure non usare gli array e cercare l'IP all'interno della stringa direttamente.
    Nel primo caso, potresti spezzettare la stringa tramite regexp, perciò sapendo che gli IP sono sequenze di numeri e punti, potremmo estrarne una lista in questo modo, ponendo che il file di testo contenga la seguente stringa ' "192.168.1.1","192.168.21.101","192.168.21.102" ':
    $contents = fread($handle,filesize($filename));
    $re = "/[\d.]{6,}/"; // sequenze di numeri e punti più lunghe di 6 caratteri
    preg_match_all($re, $contents, $banned_ip);
    A questo punto $banned_ip dovrebbe contenere (con profondità 1 o 2) la lista degli ip, oppure ritornare FALSE.
    Nel caso invece l'unica operazione necessaria sia verificare se l'ip è bannato, allora consiglio di mettere da parte array ed espressioni regolari e concentrarsi sulle stringhe, usando funzioni apposite:
    $contents = fread($handle,filesize($filename));
    $ip = $_SERVER['REMOTE_ADDR'];
    $is_banned = strpos($contents,$ip);
    if ($is_banned >= 0) {
        // bannato
    } else {
        // non bannato
    }
    La documentazione la trovi ai seguenti link:
    preg_match_all :
    strpos :

    Ciao, buon lavoro!
  • Re: In_array help

    Grazie 1000

    quindi dovrebbe essere?
    
    $filename = "IPBans.txt";
    $handle = fopen($filename, "r");
    $contents = fread($handle,filesize($filename));
    $ip = $_SERVER['REMOTE_ADDR'];
    $is_banned = strpos($contents,$ip);
    if ($is_banned >= 0) {
        // bannato
    } else {
        // non bannato
    }
    E il contenuto della stringa???
    sempre "ip1","ip2","ip3"
  • Re: In_array help

    =KING_PAIC= ha scritto:


    Grazie 1000

    quindi dovrebbe essere?
    
    $filename = "IPBans.txt";
    $handle = fopen($filename, "r");
    $contents = fread($handle,filesize($filename));
    $ip = $_SERVER['REMOTE_ADDR'];
    $is_banned = strpos($contents,$ip);
    if ($is_banned >= 0) {
        // bannato
    } else {
        // non bannato
    }
    E il contenuto della stringa???
    sempre "ip1","ip2","ip3"
    Esattamente. Il contenuto della stringa può rimanere quello, un altro modo per usare strpos, oltre a >=0, è usare !==false, in quanto se l'IP non venisse trovato nella stringa, la variabile $is_banned risulterebbe proprio FALSE.
    Comunque già così dovrebbe funzionare
Devi accedere o registrarti per scrivere nel forum
3 risposte