Эти Count()
подход может сделать дополнительную работу, поскольку (в TSQL) EXISTS
или TOP 1
часто намного более быстры; дб может оптимизировать, "там по крайней мере одна строка". Лично, я использовал бы любой/предикат перегрузку:
if (dc.Users.Any(u => u.Name == name)) {...}
, Конечно, можно сравнить то, что каждый делает путем наблюдения TSQL:
dc.Log = Console.Out;
Попробуйте функцию substr
:
$ip = '76.105.99.';
if (substr($_SERVER['REMOTE_ADDR'], 0, strlen($ip)) === $ip) {
// deny access
}
Вот пример того, как вы можете проверить конкретную комбинацию сеть / маска:
$network=ip2long("76.105.99.0");
$mask=ip2long("255.255.255.0");
$remote=ip2long($_SERVER['REMOTE_ADDR']);
if (($remote & $mask)==$network)
{
header("Location: http://example.com");
exit;
}
Это лучше, чем использование соответствия на основе строки, поскольку вы можете проверить другие маски, которые выравниваются в пределах октета, например a / 20 блок IP-адресов
Кого именно вас интересует блокировка? Вы можете использовать PHP или apache, чтобы заблокировать (или разрешить) несколько определенных IP-адресов.
Если вы заинтересованы, например, в блокировке людей из всей страны, то есть инструменты, которые выдают вам IP-адреса, которые вам нужно заблокировать . К сожалению, это не так просто, как просто указать диапазон.
Посмотрите http://www.blockacountry.com/ , который генерирует кучу IP-адресов, которые вы можете вставить в свой .htaccess, чтобы заблокировать весь стран.
Вы можете подойти к проблеме иначе.
Если вы хотите заблокировать 76.105.99. *, Вы можете сделать:
if (strpos($_SERVER['REMOTE_ADDR'], "76.105.99.")!==FALSE)
{
header ('Location: http://google.com');
}
Лучше сделать это в apache ( или любой другой сервер)
Что вам нужно сделать, так это пройти тест, чтобы увидеть, находится ли конкретный адрес внутри определенного диапазона адресов, как определено CIDR
. Так, например, вы должны иметь возможность сказать
- это 192.168.1.5
внутри
192.168.1.0/24
Эту функцию легко написать, если у вас есть базовые инструменты для работы с CIDR.
Если вы используете 32-битную систему, этот класс http://snipplr.com/view/15557/cidr-class-for-ipv4/ Обратите внимание на функцию IPisWithinCIDR
Я считаю, что вам нужно создать цикл for для добавления каждого IP-адреса. адрес (в пределах диапазона) к вашему массиву.
псевдокод
for i = 0 to 255
disallowed[i] = "76.105.99." + i
next