Jump to content
Дизайн и модификация IPS Community IPBSkinsBETA
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
muslimgauze

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

Recommended Posts

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

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

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

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

Share this post


Link to post
Share on other sites

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

 

Добавьте в 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

Share this post


Link to post
Share on other sites

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

 

Добавьте в 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>

 

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

Share this post


Link to post
Share on other sites

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

 

Добавьте в 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>

 

 

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

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

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

Share this post


Link to post
Share on other sites

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

 

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

 

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

Share this post


Link to post
Share on other sites

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

 

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

 

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

 

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

 

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

Edited by muslimgauze

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...