A volte non riesci a trovare una risposta, non importa quanto duramente Google. Mi considero fortunato ad aver trovato la risposta!
Il problema: Avete una lista di intervalli di indirizzi IP in notazione CIDR. È necessario prendere in visita IP e valutare se sono all'interno di questa lista di indirizzi consentiti. E, bisogna farlo in PHP.
La risposta: Caricare l'elenco CIDR in una matrice e valutare ogni IP in visita con la seguente funzione (che si trova qui ) ...
funzione IPFilter ($ ip) ( $ source = array ("10.0.0.0 / 8", "192.168.1.1/32", "127.0.0.0 / 8");
foreach ($ $ line come fonte) (/ / Ottiene la base ed i bit dalla lista CIDR ($ base, $ bit) = explode ('/', $ line); / / Ora è diviso in lista è classi ( a, $ b $, $ c, $ d) = $ esplodere ('.', base); / / Ora, fare un po 'po' spostando / commutazione per convertire in int $ i = ($ a <<24) + ($ b <<16) + ($ c <<8) + $ d; maschera $ = $ bit == 0? 0: (~ 0 <<(32 - $ bit)) / / Ecco la nostra più bassi int $ basso = $ i & maschera $ / / Ecco la nostra più alta int $ elevato = $ i | (~ $ maschera & 0xFFFFFFFF); / / Ora dividere l'ip che stiamo controllando contro un massimo in lista di classi ($ a, $ b, $ c, $ d) = explode ('.', $ ip); / / ora convertire l'ip che stiamo controllando contro un int controllare $ a = ($ a <<24) + ($ b <<16) + ($ c <<8) + d $ / / Se l'IP è all'interno della gamma, tra cui più alta / valori più bassi, / / allora è witin la gamma CIDR if ($> check = $ a basso & & <$ check = $ altezza) (return 1;)
) return 0; )
E 'efficiente? Non lo so. Funziona? Sì è così. E thats più di quanto posso dire su altre soluzioni a questo problema che ho trovato ( qui e altrove).

Vorrei poter-lo come il mio, ma il codice ei commenti sono entrambi dal sito di Zend. Ho postato questo solo per rendere più facile per le persone a trovare la soluzione. Contento ha aiutato!
Grazie per la funzione eccellente, Bill! Ho anche provato alcune funzioni da http://www.php.net , alcuni dei quali ho potuto dire che non sempre funziona, e alcuni sembravano gli aspiranti fino a quando li ho provati. Credo che quando tutto il resto non è solo bisogno di tornare alle basi di convertire bitmasks e indirizzi IP. Apprezzo il codice commentato! Troverete questo codice in Tera-WURFL 2.1.1 (TeraWurflWebservice.php) una volta l'ho comunicato!