задача блокировки по входящему ip. два варианта решения(ip может быть до 50 примерно): Так: Код (Text): $arrblk[]='193.232.240.17'; $arrblk[]='46.118.119.25'; $arrblk[]='86.110.188.78'; $numblock = count($arrblk); $perblk=0; for ($chblock=0; $chblock<$numblock; $chblock++) { if ($_SERVER['REMOTE_ADDR'] == $arrblk[$perblk]) { die('blocked ' . $_SERVER['REMOTE_ADDR']); } $perblk++; } или так Код (Text): if ($_SERVER['REMOTE_ADDR'] == '193.232.240.17') { die('blocked ' . $_SERVER['REMOTE_ADDR']); } if ($_SERVER['REMOTE_ADDR'] == '46.118.119.25') { die('blocked ' . $_SERVER['REMOTE_ADDR']); } if ($_SERVER['REMOTE_ADDR'] == '86.110.188.78') { die('blocked ' . $_SERVER['REMOTE_ADDR']); }
не так и не этак... PHP: <? $arrblk = []; $arrblk[]='193.232.240.17'; $arrblk[]='46.118.119.25'; $arrblk[]='86.110.188.78'; if ( preg_match ( "/{$_SERVER['REMOTE_ADDR']}/i", implode ( ';', $arrblk ) ) ) { echo 'blocked ' . $_SERVER['REMOTE_ADDR']; } --- Добавлено --- exit;
Parse error: syntax error, unexpected на этом моменте $arrblk=[]; (вторая строка) если строку удалить тоже ошибки есть айпи в списке
Спойлер: У тебя версия какая Php ? Спойлер: Ниже 5.6 $arrblk = array(); Спойлер: Пора переходить на 5.6 $arrblk = []; --- Добавлено --- P.s: Вступай в конфу!
$arrblk = array(); $arrblk[]='193.232.240.17'; $arrblk[]='46.118.119.25'; $arrblk[]='86.110.188.78'; if ( preg_match ( "/{$_SERVER['REMOTE_ADDR']}/i", implode ( ';', $arrblk ) ) ) { echo 'blocked ' . $_SERVER['REMOTE_ADDR']; } exit; так окно пустое если айпи нет в списках блока, если в списке то блочит. в файле где этот код еще код всякий есть.
in_array, не? Для пущей важности можно все предварительно в число переводить и список заблокированных хранить в отдельном файле, чтобы для его обновления каждый раз в код не лезть.
PHP: $arrblk = array( '193.232.240.17' => '' , '46.118.119.25' => '' , '86.110.188.78' => '' ); isset($arrblk[$_SERVER['REMOTE_ADDR']]) && die('blocked ' . $_SERVER['REMOTE_ADDR']);
Решение через регулярку тоже немного индусское, если честно А тут..ну это прокатит, если, например, каждому IP нужно свою мессагу выдавать. Тогда использование IP как ключей оправдано. В противном случае это не очень правильно. Выше же было написано про in_array. Почему бы не использовать его? PHP: <?php $arrblk = []; $arrblk[]='193.232.240.17'; $arrblk[]='46.118.119.25'; $arrblk[]='86.110.188.78'; if (in_array($_SERVER['REMOTE_ADDR'], $arrblk)){ echo 'blocked ' . $_SERVER['REMOTE_ADDR']; }
Ладно, все мы не без греха, что уж там. Более чем уверен, что любой гуру, если залезет в свой же идеальный код годовалой давности, рано или поздно воскликнет "Какой дебил это написал? Ах да...я сам." И это прекрасно. Это значит, что за этот год навыки выросли, знания приумножились, квалификация поднялась. И все это складывается из таких вот мелочей.
Метасимвол точка совпадает с любым символом, так что содержимое переменной нужно экранировать, перед тем как использовать в регулярке. PHP: $blk =' 193.232.240.17 46.118.119.25 86.110.188.78 '; if ( preg_match ( "/^\Q{$_SERVER['REMOTE_ADDR']}\E$/m", $blk ) ) { die( 'blocked ' . $_SERVER['REMOTE_ADDR'] ); }
Все еще проще - не надо проводить поиск по массиву, через превращение оного в строку с дальнейшим парсингом регуляркой. Это индуизм чистейшей воды.