PHP

Помогите как сделать исключения по айпи

<?php
require ("files/inc/config.php");

if($tex==1){
header('Location: tex');
}
?>

Если переменная tex равна 1, то будет идти переадресация на страницу /tex

кроме определенных айпи(85.26.233.220 и 77.222.113.4) мне нужно
<?php
require ("files/inc/config.php");
if ($tex == 1 && !in_array($_SERVER['REMOTE_ADDR'], ['85.26.233.220', '77.222.113.4'])) {
header('Location: tex');
}
?>

Будет работать только если в массиве $_SERVER['REMOTE_ADDR'] содержится реальный IP посетителя.
Валерий Винокуров
Валерий Винокуров
62 978
Лучший ответ
Длявер Эмирвелиев айпи же меняется постоянно на 1 цифру, как сделать чтобы настройки не сбивались
UPD в этом ответе т.к у предыдущего истёк срок редактирования: Почитал другие ваши вопросы на "ответах" и понял что вам нужно нечто иное. Давайте попробуем:

<?php
require("files/inc/config.php");

/*
Небольшая, костыльная функция для проверки IP...
$ipMask -- маска IP.. символ "?" допускает любое число, эта переменная может быть массивом и проверять сразу несколько IP
$userIp -- айпишник пользователя, который мы и будем проверять
$fixedDigitCount -- переменная определяющая нужно ли учитывать количество цифр в секциях IP.. пример:
если $fixedDigitCount == 1, тогда "172.0.0.??" не равняется "172.0.0.1", потому что ожидается 2 цифры, как указано в маске... работает только в сторону уменьшения... при отключённом $fixedDigitCount "172.0.0.?" не равняется "172.0.0.11"...
*/

function isIpListed($ipMask, $userIp, $fixedDigitCount = false)
{
$regexDigitCount = ($fixedDigitCount ? "" : "0,");
function checkIp($ipMask, $userIp, $regexDigitCount)
{
$tmpRegex = str_replace(".", "[.]", $ipMask, $tmpRegex);
$tmpRegex = str_replace("???", "\d{".$regexDigitCount."3}", $tmpRegex);
$tmpRegex = str_replace("??", "\d{".$regexDigitCount."2}", $tmpRegex);
$ipRegex = "/^".str_replace("?", "\d", $tmpRegex)."$/";
return preg_match($ipRegex, $userIp);
}
if (gettype($ipMask) == "array")
{
foreach($ipMask as $ip)
{
if (checkIp($ip, $userIp, $regexDigitCount) == true) return true;
}
return false;
}
else
{
return checkIp($ipMask, $userIp, $regexDigitCount);
}
}

/*
Вновь (это ведь уже другой код) узнаём айпишник пользователя
*/

$ip = (isset($_SERVER['HTTP_CLIENT_IP']) ? $_SERVER['HTTP_CLIENT_IP'] : (isset($_SERVER['HTTP_X_FORWARDED_FOR']) ? $_SERVER['HTTP_X_FORWARDED_FOR'] : $_SERVER['REMOTE_ADDR']));

/*
И проверяем что этот айпишник доступен, в нашём примере, айпишник "85.26.233.220" может менять последнюю цифру крайней секции... т.е может быть от 220 до 229... а значит ставим туда "?" чтобы допустить этот диапазон.
*/
if ($tex && !isIpListed(["85.26.233.22?", "77.222.113.4"], $ip)) header('Location: tex');
?>