=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!