Уважаемые пользователи!
C 7 ноября 2020 года phpBB Group прекратила выпуск обновлений и завершила дальнейшее развитие phpBB версии 3.2.
С 1 августа 2024 года phpBB Group прекращает поддержку phpBB 3.2 на официальном сайте.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2024 года.
С учетом этого, настоятельно рекомендуется обновить конференции до версии 3.3.

[MOD?] Преобразование ссылок в зависимости от IP посетителя

Форум для авторов модов для phpBB 2.0.x.
Аватара пользователя
Siava
Поддержка
Поддержка
Сообщения: 5284
Стаж: 19 лет 3 месяца
Откуда: Питер
Благодарил (а): 186 раз
Поблагодарили: 793 раза

[MOD?] Преобразование ссылок в зависимости от IP посетителя

Сообщение Siava »

Для нужд своего форума как-то набросал мод.
Смысл в том, что у меня форум 2 года в локальной сети, но готовится для выхода в интернет.
Понятное дело, ссылки в темах, картинки в статьях и многое другое имеет вид локальных ссылок типа http://192.168.1.2/... для интернета они не подходят.
Вот и возникла идея создания мода, который будет преобразовывать ссылки такого типа во внешние, если посетитель заходит из инета.
Смысл заключается в использовании буферизации ob_start().

В page_header.php
FIND:

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

//
// Generate logged in/logged out status
//
if ( $userdata['session_logged_in'] )
BEFORE ADD:

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

function replace_addr($buffer)
{
  $orig_addr = "http://192.168.1.2/";
  $new_addr = "http://siava.ru/";

  $s = str_replace($orig_addr, $new_addr, $buffer);
  return $s;
}

function is_local($addr)
{
  $net = substr($addr, 0, 7);
  if (($net == "192.168") || ($net == "194.105"))
  { return true; } else { return false; }
}

if (!is_local($client_ip)) ob_start("replace_addr");
Пояснения к коду выше:
функция function replace_addr заменяет один адрес на другой.
функция function is_local проверяет откуда пришёл посетитель, из инета или из внутренней сети (маски адресов внутренней сети внутри функции).


В page_tail.php
FIND:

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

//
// Close our DB connection.
//
$db->sql_close();
AFTER ADD:

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

if (!is_local($client_ip)) ob_end_flush();
Прошу помощи..
Эта конструкция работает не очень стабильно, иногда вылезают глюки с белым экраном.. наверно что-то с буферизацией не то сделал :( Но ссылки преобразует.

Мне кажется, что я накосячил в последнем коде и там надо не ob_end_flush(); а ob_get_contents();

Знатоки, поправьте меня :)

Добавлено спустя 1 час 3 минуты 23 секунды:

Что-то я рано помощи попросил :mrgreen:
Действительно, правильно будет

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

if (!is_local($client_ip)) ob_get_contents();
Сейчас всё пока работает корректно. Старые глюки с белым экраном пропали :)
Вечером залью на рабочий форум, потестирую пару дней и если будет ок, то оформлю модом :)

Добавлено спустя 5 часов 46 минут 27 секунд:

Всё работает :)
Еще одно нарушение правил и будете забанены. © Mr. Anderson
Ты очистил кеш? © Sheer
https://siava.ru (phpbb 2.0.x 3.5.x)

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