Utilisez ip2long()
pour convertir décimale pointée vers une adresse IP réelle. Ensuite, vous pouvez faire des gammes facilement.
Il suffit de faire ip2long()
sur la gamme haute et basse pour obtenir la valeur, puis utilisez-les comme constantes dans votre code.
Si vous êtes familier avec le masquage de sous-réseau, vous pouvez le faire comme ceci:
// Deny 10.12.*.*
$network = ip2long("10.12.0.0");
$mask = ip2long("255.255.0.0");
$ip = ip2long($_SERVER['REMOTE_ADDR']);
if (($network & $mask) == ($ip & $mask)) {
die("Unauthorized");
}
Ou si vous êtes familier avec ce format 10.12.0.0/16
:
// Deny 10.12.*.*
$network = ip2long("10.12.0.0");
$prefix = 16;
$ip = ip2long($_SERVER['REMOTE_ADDR']);
if ($network >> (32 - $prefix)) == ($ip >> (32 - $prefix)) {
die("Unauthorized");
}
Vous pouvez les transformer en fonctions et ont un code très maniable, ce qui facilite l'ajout d'adresses IP et la personnalisation des plages.
recherche générique hehe, je suis surpris que ' strpos' fonctionne ici plus vite que 'substr' – zerkms
@zerkms cela ne devrait pas vraiment être surprenant -' strpos' peut retourner immédiatement si le test échoue, et ne doit pas faire toute copie ou attribution de chaîne. Aussi, je voulais juste noter que le comportement change si vous changez '===' pour '==', donc ne faites pas cela. Utilisez trois signes égaux. – gnud
@gnud: pour les longues chaînes, les strpos seraient plus lentes, juste parce qu'elles devraient parcourir toute la chaîne pour fouiller l'aiguille. et je sais quelle est la différence de '===' et '=='. – zerkms