Перейти к публикации
View in the app

A better way to browse. Learn more.

Дизайн и модификация Invision Community

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

"Локализация" сайта - запрет загрузки счетчиков с определенного диапазона 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>

Опубликовано:
  • Автор

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

 

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

Опубликовано:
  • Автор

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

 

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

 

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

 

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

 

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

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

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

Сейчас на странице 0

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

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.