Перейти к публикации
Дизайн и модификация IPS Community IPBSkinsBETA
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
muslimgauze

"Локализация" сайта - запрет загрузки счетчиков с определенного диапазона IP

Рекомендованные сообщения

Возможна-ли такая "локализация" сайта, как запрет загрузки счетчиков (грубо говоря, внешних картинок), для посетителей с определенного диапазона IP?

Если у провайдера авария с инетом, то форум, доступный по локалке, начинает реально подтормаживать, по понятной причине.

Вот я и хочу, что бы для "локальных" юзеров грузилась только "локальная" часть сайта, без внешних ссылок :)

Возможно ли это как-то организовать?

Поделиться сообщением


Ссылка на сообщение

Конечно, возможна.

 

Добавьте в initdata.php в начало что-то вроде:

function netmask_match ( $network , $ip ) {
 $ip_arr = explode ( '/' , $network );
 $network_long = ip2long ( $ip_arr [ 0 ]);
 $x = ip2long ( $ip_arr [ 1 ]);
 $mask = long2ip ( $x ) == $ip_arr [ 1 ] ? $x : 0xffffffff << ( 32 - $ip_arr [ 1 ]);
 $ip_long = ip2long ( $ip );
 return ( $ip_long & $mask ) == ( $network_long & $mask );
}

$allowed_masks = array(
 '10.0.0.0/8',
 '192.168.0.0/16',
);

$match = false; $ip = $_SERVER['REMOTE_ADDR'];

foreach( $allowed_masks as $mask ) {
 if ( netmask_match ( $mask , $ip ) ) { $match = true; break; }
}

define('OUR_USER', $match);

 

Теперь в шаблонах можно везде, где требуется, опираться на условие:

<if test="OUR_USER">Привет пользователю нашей сети!</if>

 

или, например:

<if test="!OUR_USER">Код счетчика</if>

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение

Конечно, возможна.

 

Добавьте в initdata.php в начало что-то вроде:

function netmask_match ( $network , $ip ) {
 $ip_arr = explode ( '/' , $network );
 $network_long = ip2long ( $ip_arr [ 0 ]);
 $x = ip2long ( $ip_arr [ 1 ]);
 $mask = long2ip ( $x ) == $ip_arr [ 1 ] ? $x : 0xffffffff << ( 32 - $ip_arr [ 1 ]);
 $ip_long = ip2long ( $ip );
 return ( $ip_long & $mask ) == ( $network_long & $mask );
}

$allowed_masks = array(
 '10.0.0.0/8',
 '192.168.0.0/16',
);

$match = false; $ip = $_SERVER['REMOTE_ADDR'];

foreach( $allowed_masks as $mask ) {
 if ( netmask_match ( $mask , $ip ) ) { $match = true; break; }
}

define('OUR_USER', $match);

 

Теперь в шаблонах можно везде, где требуется, опираться на условие:

<if test="OUR_USER">Привет пользователю нашей сети!</if>

 

или, например:

<if test="!OUR_USER">Код счетчика</if>

 

гениально! ;)

Поделиться сообщением


Ссылка на сообщение

Конечно, возможна.

 

Добавьте в initdata.php в начало что-то вроде:

function netmask_match ( $network , $ip ) {
 $ip_arr = explode ( '/' , $network );
 $network_long = ip2long ( $ip_arr [ 0 ]);
 $x = ip2long ( $ip_arr [ 1 ]);
 $mask = long2ip ( $x ) == $ip_arr [ 1 ] ? $x : 0xffffffff << ( 32 - $ip_arr [ 1 ]);
 $ip_long = ip2long ( $ip );
 return ( $ip_long & $mask ) == ( $network_long & $mask );
}

$allowed_masks = array(
 '10.0.0.0/8',
 '192.168.0.0/16',
);

$match = false; $ip = $_SERVER['REMOTE_ADDR'];

foreach( $allowed_masks as $mask ) {
 if ( netmask_match ( $mask , $ip ) ) { $match = true; break; }
}

define('OUR_USER', $match);

 

Теперь в шаблонах можно везде, где требуется, опираться на условие:

<if test="OUR_USER">Привет пользователю нашей сети!</if>

 

или, например:

<if test="!OUR_USER">Код счетчика</if>

 

 

похоже, что не работает

прописал диапазоны, зашел на страницу, счетчики пропали

зашел через прокси и анонимайзеры - счетчики не вернулись!

Поделиться сообщением


Ссылка на сообщение

Выведите где-нибудь в подвале сайта блок:

 

Ваш IP: {$_SERVER['REMOTE_ADDR']}. <if test="OUR_USER">Вы из нашей сети<else />Вы не из нашей сети</if>

 

И проверьте работу по нему. Код тестировал. Возможно, вы как-то не так не задействовали прокси, или PHP получает неверный IP.

Поделиться сообщением


Ссылка на сообщение
09/24/11 20:50 (изменено)

Выведите где-нибудь в подвале сайта блок:

 

Ваш IP: {$_SERVER['REMOTE_ADDR']}. <if test="OUR_USER">Вы из нашей сети<else />Вы не из нашей сети</if>

 

И проверьте работу по нему. Код тестировал. Возможно, вы как-то не так не задействовали прокси, или PHP получает неверный IP.

 

Блок работает верно - через проксЮ написал "вы не из нашей сети", да и в обоих случаях он вывел верный IP

 

скорее всего оно не понимало "!OUR_USER", так как последняя конструкция, с включенными внутрь счетчиками, принимается на ура! а до этого оно не работало по причине "анонимайзер превращал все ссылки в локальные от своего имени"

Изменено пользователем muslimgauze

Поделиться сообщением


Ссылка на сообщение

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

×
×
  • Создать...