Сторонний скрипт

Нашел в сети небольшой скрипт блокировки по ip адресу, заинклудил его в шаблон, но выскакивает ошибка, вот собственно сам скрипт


<?php
/* Сообщение при банне ip */
define("bann_message", "<table cellpadding='0' cellspacing='0' class='moduletable'><tr><td><center><span style=font-size:15pt;><font color=red>Для вашего IP: %ip% доступ к сайту закрыт.</font></span></center></td></tr></table>");
 
/* Предупреждение о возможности банна по ip */
define("wrong_message", "<center><b><font color=red>Вы предупреждены администратором данного сайта о возможной блокировке вашего IP: %ip% в случае дальнейшего нарушения правил.</font></b></center><br />");
 
/* массив с ip и типом блокировки. в ключе массива IP, в значении тип блокировки */
$bann_array = array(
                    "195.66.203.247"=>"bann", // реальный плохой IP
                    "220.94.220.60"=>"bann",  // реальный плохой IP
                    // "127.0.0.1"=>"wrong"      // Test
                    );
 
/* Функция для почти 100% определения IP адреса посетителя. */
/* Перебирает все возможные переменные с IP. */
function _ip()
{
  if(isset($HTTP_SERVER_VARS)) {
    if(isset($HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"])) {
    $realip = $HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"];
    }elseif(isset($HTTP_SERVER_VARS["HTTP_CLIENT_IP"])) {
      $realip = $HTTP_SERVER_VARS["HTTP_CLIENT_IP"];
    }else{
      $realip = $HTTP_SERVER_VARS["REMOTE_ADDR"];
    }
  }else{
  if(getenv( 'HTTP_X_FORWARDED_FOR' ) ) {
    $realip = getenv( 'HTTP_X_FORWARDED_FOR' );
  }elseif ( getenv( 'HTTP_CLIENT_IP' ) ) {
    $realip = getenv( 'HTTP_CLIENT_IP' );
  }else {
    $realip = getenv( 'REMOTE_ADDR' );
  }
}
return $realip;
}
 
/* Определяет, что делать с владельцем того или иного ip адреса */
function bann_on_not_to_bann()
{
    global $bann_array; // получаем массив с ip адресами
    $user_ip = _ip();   // получаем ip
 
/* разбираем массив на ключ и значение */
foreach($bann_array as $ip=>$type)
{
    if ($ip == $user_ip) // проверяем
    {
        switch($type) // если ip совпал то смотрим что делать
        {
            case "wrong": // предупреждение
            {
                echo str_replace("%ip%", $user_ip, wrong_message); // выводим предупреждение
                break; // выход из switch
            }
            case "bann": // блокировка
            {
                die(str_replace("%ip%", $user_ip, bann_message)); // Сообщение о том, что доступ закрыт + завершение работы php
                // break не требуется т.к. дальше уже ничего не выполняется
            }
        }
    }
}
}
 
/* проверяем владельца ip и блокируем\предупреждаем если это спамер */
bann_on_not_to_bann();
?>

а выдает ошибку эта строка
foreach($bann_array as $ip=>$type)
типа неверный аргумент, может кто подскажет в чем может быть проблема

5 комментариев

avatar
Используйте плагин админки, там есть бан по ip, лучше чем левые скрипты.
avatar
спасибо, что-то я ступил — установлена же админпанель :)
avatar
gran, +1

А ошибка была из-за того, что $bann_array не объявили в самом начале скрипта как глобальный массив.
avatar
а как его объявить глобальным? я в php не разбираюсь
avatar
все, разобрался, всем большое спасибо
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.