Проверка IP

Форум для авторов модов для phpBB 3.0.x. Здесь можно попросить помощи в разработке у коллег.
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
insp63
phpBB 1.0.0
Сообщения: 3
Стаж: 18 лет 6 месяцев

Проверка IP

Сообщение insp63 »

Здраствуйте
В overall_header.html у меня прописана менюшка которую я хочу показывать только тем пользователям у кого IP входит в диапазон 10.0.0.0 - 10.255.255.255, т.е. для локальных. Для пользователей из интернета эта менюшка будет не видна. Как это реализовать?
Пока у меня стоит условие <!-- IF S_USER_LOGGED_IN -->...
Vitalik
phpBB 1.0.0
Сообщения: 8
Стаж: 18 лет 6 месяцев
Откуда: Мытищи, МО

Сообщение Vitalik »

Узнай адрес клинта
Разреж его по точке на подадреса
Если из диапазона - показывай.

Или еще проще
Если нужна только область 10.х.х.х

Если первые символы 10. адреса клиента - показывай, если нет - скрывай.

php сила
Автоматизация процесса сбора, хранения, обработки и предоставления информации

Мой блог про военных Тут
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 17272
Стаж: 20 лет 4 месяца
Откуда: Красноярск
Благодарил (а): 632 раза
Поблагодарили: 2412 раз

Сообщение rxu »

1)Пребразуете диапазон адресов по формуле:
$ip_hex_1=(10 * 16777216) + (0 * 65536) + (0 * 256) + (0);
$ip_hex_2 = (10 * 16777216) + (255 * 65536) + (255 * 256) + (255);
2) Разбиваете адрес на 4 части, например

Код: Выделить всё

$ip_array = array();
$ip_array = explode('.', $user->ip);
3) Преобразуете этот адрес аналогичным способом:
$ip_hex_user = ($ip_array[0] * 16777216) + ($ip_array[1] * 65536) + ($ip_array[2] * 256) + ($ip_array[3]);
4) Делаете обычную проверку на принадлежность числа диапазону, например

Код: Выделить всё

if ($ip_hex_user >= $ip_hex_1 && $ip_hex_user <= $ip_hex_2)
{
      Тут передаете в шаблон определенную переменную;
       Например так (грубо)
$template->assign_vars(array(
	'USER_VALID'	=> true,
));
}
5) В шаблоне делаете блок по условию <!-- IF USER_VALID -->...

В общих чертах так.
Изображение
insp63
phpBB 1.0.0
Сообщения: 3
Стаж: 18 лет 6 месяцев

Сообщение insp63 »

Спасибо огромное... rxu - ты гуру php :D
Аватара пользователя
FladeX
Former team member
Сообщения: 1935
Стаж: 19 лет 3 месяца
Откуда: Саранск
Благодарил (а): 7 раз
Поблагодарили: 59 раз

Сообщение FladeX »

rxu
а если через регулярные выражения? Ведь можно взять сначала сам ip адрес, затем первую часть - то что перед первой точкой. Ну и дальше сравнивать. Почему именно так вы написали?
ЗЫ. Я только начал php учить, поэтому интересно почему именно такое решение.
//
// Okay, let's do the loop, yeah come on baby let's do the loop
// and it goes like this ...
| phpBB Adept ] | Каталог форумов | генератор sitemap для форумов | форум про форумы
Аватара пользователя
crash
Former team member
Сообщения: 6517
Стаж: 22 года 2 месяца
Откуда: Бердск
Поблагодарили: 15 раз

Сообщение crash »

FladeX
просто сравнивается если адрес в диапазоне между 10.0.0.0 и 10.255.255.255, то все пучком. Но опять же это самый просто пример, а если у меня с 10.0.0.0 по 10.1.255.255, ну или 10.0.0.255
Как правильно задавать вопросы
Для особо одаренных: поиск - это есть круто.
FAQ v.2 | FAQ v.3 | Шаблон запроса
Аватара пользователя
FladeX
Former team member
Сообщения: 1935
Стаж: 19 лет 3 месяца
Откуда: Саранск
Благодарил (а): 7 раз
Поблагодарили: 59 раз

Сообщение FladeX »

crash
ну вообще да, это более универсальный способ.. Понятно
//
// Okay, let's do the loop, yeah come on baby let's do the loop
// and it goes like this ...
| phpBB Adept ] | Каталог форумов | генератор sitemap для форумов | форум про форумы
Ltd
phpBB 1.2.0
Сообщения: 14
Стаж: 19 лет

Сообщение Ltd »

rxu писал(а):1)Пребразуете диапазон адресов по формуле:
Тема конечно старая, но просто на заметку. В php есть готовая функция ip2long.

Вернуться в «Для авторов (phpBB 3.0.x)»