Перейти к содержимому
Открыть в приложении

Удобный способ просмотра. Узнать больше.

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

Полноэкранное приложение на главном экране с push-уведомлениями, медалями и многим другим.

Чтобы установить это приложение на iOS и iPadOS
  1. Нажмите иконку «Поделиться» в Safari
  2. Прокрутите меню и нажмите На экран «Домой».
  3. Нажмите Добавить в правом верхнем углу.
Чтобы установить это приложение на Android
  1. Нажмите меню из трёх точек (⋮) в правом верхнем углу браузера.
  2. Нажмите Добавить на главный экран или Установить приложение.
  3. Подтвердите, нажав Установить.
Русский язык для Invision Community 5

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

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

Аккаунт

Навигация

Поиск

Поиск

Настроить push-уведомления браузера

Chrome (Android)
  1. Нажмите на иконку замка рядом с адресной строкой.
  2. Нажмите Права доступа -> Уведомления.
  3. Измените свои настройки.
Chrome (компьютер)
  1. Нажмите на иконку замка в адресной строке.
  2. Выберите Настройки сайта.
  3. Найдите Уведомления и измените свои настройки.