есть файл cidr.txt :
37.228.104.0/21
46.211.0.0/16
58.67.157.0/24
59.151.95.128/25
59.151.98.128/27
нужно определить текущий IP и проверить входит ли данный IP в список подсетей из файла.
Хелп (
Используй этот метод для определения вхождения:
function isIpInRange($ip, $IpRange) {
// Получаем массив, состоящий из IP и номера маски
$IpRange = explode('/', $IpRange);
/*
* Элемент массива [0] является начальным IP (сеть)
* Конвертируем строку, содержащую IPv4-адрес в целое число
*/
$range_start = ip2long($IpRange[0]);
/*
* Выделяем число адресов в диапазоне как 2^(32-номер_маски)
* Делаем -1, иначе закхватываем широковещательный канал
*/
$range_end = $range_start + pow(2, 32-intval($IpRange[1])) - 1;
$ip = ip2long($ip);
return ($ip >=$range_start && $ip <= $range_end) ? 1 : 0;
}
echo $result = isIpInRange('31.173.80.80', '31.173.80.0/21'); // true
echo $result = isIpInRange('31.173.79.255', '31.173.80.0/21'); // false
Для получения текущего IP:
function getUserIpAddr(){
if(!empty($_SERVER['HTTP_CLIENT_IP'])){
//ip from share internet
$ip = $_SERVER['HTTP_CLIENT_IP'];
}elseif(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){
//ip pass from proxy
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
}else{
$ip = $_SERVER['REMOTE_ADDR'];
}
return $ip;
}
echo 'User Real IP - '.getUserIpAddr();
Считываешь каждую строку из файла и проверяешь по методам выше:
if ($fh = fopen('cidr.txt', 'r')) {
while (!feof($fh)) {
$line = fgets($fh);
echo $line;
}
fclose($fh);
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Хотел спросить, относится ли абстракция к принципам ООП? Почему на некоторых ресурсах только: наследование, инкапсуляция, полиморфизм?