Посмотрите в БД.LCFSCS писал(а): 28.12.2018 23:12 Просмотрел все добавленные теги в админке - ни в одном нет модификаторов.
Как приучить к PHP 7.2?
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ | Как задавать вопросы | Как устанавливать расширения
Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение

-
- phpBB 3.0.4
- Сообщения: 2215
- Стаж: 17 лет 4 месяца
- Откуда: Павлодар
- Благодарил (а): 2 раза
- Поблагодарили: 117 раз
Re: Как приучить к PHP 7.2?
-
- phpBB 1.2.1
- Сообщения: 23
- Стаж: 6 лет 4 месяца
- Благодарил (а): 2 раза
Re: Как приучить к PHP 7.2?
Действительно в базе сидит куча модификаторов:
Код: Выделить всё
13, 'center', 'Текст, выровненный по центру: [center]текст[/center]', 1, '[center]{TEXT}[/center]', '<div style=\"text-align:center;\">{TEXT}</div>', '!\\[center\\](.*?)\\[/center\\]!ies',
И с этим теперь ничего не сделать?
Придётся временно "отключить" "свои" теги (до переезда на сервак), либо пытаться реализовать функционал и дизайн на новой версии?
-
- phpBB 3.0.4
- Сообщения: 2215
- Стаж: 17 лет 4 месяца
- Откуда: Павлодар
- Благодарил (а): 2 раза
- Поблагодарили: 117 раз
Re: Как приучить к PHP 7.2?
includes/acp/acp_bbcodes.php
и includes/bbcode.php
надеюсь правили?Теперь нужно просто пересохранить все пользовательские bbcode.
-
- phpBB 1.2.1
- Сообщения: 23
- Стаж: 6 лет 4 месяца
- Благодарил (а): 2 раза
Re: Как приучить к PHP 7.2?
Всё поправил (всё, что нашёл).nissin писал(а): 30.12.2018 1:40 ну вы же includes/acp/acp_bbcodes.php и includes/bbcode.php надеюсь правили?
Теперь нужно просто пересохранить все пользовательские bbcode.
Сегодня передобавлю теги - отпишу результат.
Спасибо.
-
- phpBB 1.2.1
- Сообщения: 23
- Стаж: 6 лет 4 месяца
- Благодарил (а): 2 раза
Re: Как приучить к PHP 7.2?
Спасибо. Сработало. Нет ошибок, все теги работают. Но вот во всех старых сообщениях теги не обрабатываются (от есть отображаются тегами).
Как это можно исправить? (Пересохранить 70 тысячь сообщений в принципе возможно, но можно сойти с ума, да и, думаю, есть другой вариант... Полюбому уже встречалась такая проблема после обновлений)
-
- phpBB 1.2.1
- Сообщения: 23
- Стаж: 6 лет 4 месяца
- Благодарил (а): 2 раза
Re: Как приучить к PHP 7.2?
А это где/как?
---------------------------------------
Поторопился я радоваться... Заново добавил теги в PHP 5.6, чтобы "надёжней" и, забыв переключиться на PHP 7, начал тестить.
Бесполезно это. Дело в том, что модификаторы e для своих тегов phpBB пихает и на версии 3.2.4 - толбко что проверил.
Код: Выделить всё
VALUES (13, 'c', 'Текст, выровненный по центру: [c]текст[/c]', 0, '[c]{TEXT}[/c]', '<div style=\"text-align:center;\">{TEXT}</div>', '!\\[c\\](.*?)\\[/c\\]!ies', '\'[c:$uid]\'.str_replace(array(\"\\r\\n\", \'\\\"\', \'\\\'\', \'(\', \')\'), array(\"\\n\", \'\"\', \''\', \'(\', \')\'), trim(\'${1}\')).\'[/c:$uid]\'', '!\\[c:$uid\\](.*?)\\[/c:$uid\\]!s', '<div style=\"text-align:center;\">${1}</div>'),(14, 'center', 'Текст, выровненный по центру: [center]текст[/center]', 1, '[center]{TEXT}[/center]', '<div style=\"text-align:center;\">{TEXT}</div>', '!\\[center\\](.*?)\\[/center\\]!ies', '\'[center:$uid]\'.str_replace(array(\"\\r\\n\", \'\\\"\', \'\\\'\', \'(\', \')\'), array(\"\\n\", \'\"\', \''\', \'(\', \')\'), trim(\'${1}\')).\'[/center:$uid]\'', '!\\[center:$uid\\](.*?)\\[/center:$uid\\]!s', '<div style=\"text-align:center;\">${1}</div>');
Видимо, отн потом просто преображает данный модификатор в что-то иное. И не в ту степь копали - не нужно было передобавлять теги. Нужно заставить также преобразовывать модификатор.
Отправлено спустя 35 минут 32 секунды:
Это, полходу, фукция для includes/message_parser.php, взятая мной из https://bitbucket.org/Sumanai/phpbbex-2 ... 1a5b11afb7 должна модификатор заменять:
Код: Выделить всё
if (is_callable($replacement))
+ {
+ $this->message = preg_replace_callback($regexp, $replacement, $this->message);
+ }
+ // @todo REMOVE for 3.2.0
+ else if (version_compare(PHP_VERSION, '7.0.0', '>='))
+ {
+ $regexp_modifiers = preg_replace('/!(.*)!([a-z]*)/', '$2', $regexp);
+ if (strpos($regexp_modifiers, 'e') !== false)
+ {
+ $regexp = preg_replace('/!(.*)!([a-z]*)/', '!$1!', $regexp);
+ $this->message = preg_replace_callback(
+ $regexp . str_replace('e', '', $regexp_modifiers),
+ create_lambda('$matches', 'return ' . preg_replace('#\$\{([\d])\}#ui', '\'.$matches[$1].\'', str_replace('$this->', '', $replacement)) . ';'),
+ $this->message
+ );
+ }
+ else
+ {
+ $this->message = preg_replace($regexp, $replacement, $this->message);
+ }
+ }
+ else
+ {
+ $this->message = preg_replace($regexp, $replacement, $this->message);
+ }
Код: Выделить всё
$this->message = preg_replace($regexp, $replacement, $this->message);
Код: Выделить всё
+/**
+* Caching for create_function
+* @todo REMOVE for 3.2.0
+*/
+function create_lambda($args, $code) {
+ static $func;
+ if (!isset($func[$args][$code])) {
+ $func[$args][$code] = create_function($args, $code);
+ }
+ return $func[$args][$code];
+}
-
- Поддержка
- Сообщения: 12751
- Стаж: 13 лет 8 месяцев
- Благодарил (а): 159 раз
- Поблагодарили: 2276 раз
Re: Как приучить к PHP 7.2?
В 3.2 тот код вообще не задействован, он оставлен для обратной совместимости. Там другой обработчик ббкодовLCFSCS писал(а): 31.12.2018 0:11 Видимо, он потом просто преображает данный модификатор в что-то иное
-
- phpBB 1.2.1
- Сообщения: 23
- Стаж: 6 лет 4 месяца
- Благодарил (а): 2 раза
Re: Как приучить к PHP 7.2?
В 3.2 он также пихает в базу своих тегов модификаторы e. В моём предыдущем сообщении база бб-кодов VALUES (13, 'c'... из нулёвого чистого phpBB 3.2.4 установленного на чистую базу и без любых модификаций кода - это я ради теста добавил два своих кода, сохранил таблицу с этими кодами и открыл её.Татьяна5 писал(а): 31.12.2018 0:56 В 3.2 тот код вообще не задействован, он оставлен для обратной совместимости. Там другой обработчик ббкодов
Тот код - из инструкции по ссылке по приучению к PHP 7. Я имел в виду, что с помощью похожей функции можно реализовать "переделывание" модификаторов.
-
- Поддержка
- Сообщения: 12751
- Стаж: 13 лет 8 месяцев
- Благодарил (а): 159 раз
- Поблагодарили: 2276 раз
-
- phpBB 1.2.1
- Сообщения: 23
- Стаж: 6 лет 4 месяца
- Благодарил (а): 2 раза
Re: Как приучить к PHP 7.2?
Код: Выделить всё
/**
* Parse BBCode
*/
function parse_bbcode()
{
if (!$this->bbcodes)
{
$this->bbcode_init();
}
global $user;
$this->bbcode_bitfield = '';
$bitfield = new bitfield();
foreach ($this->bbcodes as $bbcode_name => $bbcode_data)
{
if (isset($bbcode_data['disabled']) && $bbcode_data['disabled'])
{
foreach ($bbcode_data['regexp'] as $regexp => $replacement)
{
if (preg_match($regexp, $this->message))
{
$this->warn_msg[] = sprintf($user->lang['UNAUTHORISED_BBCODE'] , '[' . $bbcode_name . ']');
continue;
}
}
}
else
{
foreach ($bbcode_data['regexp'] as $regexp => $replacement)
{
// The pattern gets compiled and cached by the PCRE extension,
// it should not demand recompilation
if (preg_match($regexp, $this->message))
{
if (is_callable($replacement))
{
$this->message = preg_replace_callback($regexp, $replacement, $this->message);
}
else
{
$this->message = preg_replace($regexp, $replacement, $this->message);
}
$bitfield->set($bbcode_data['bbcode_id']);
}
}
}
}
$this->bbcode_bitfield = $bitfield->get_base64();
}
Код: Выделить всё
else
{
$this->message = preg_replace($regexp, $replacement, $this->message);
}
Если не убирать, то обрабатываются все BB-теги, но получаем ошибку из-за модификаторов из базы своих тегов.
Надо как-то убрать из $this->message = preg_replace модификаторы е - это либо перед данной функцией запихать функцию замены модификаторов, либо прикрутить s9e/textformatter. Вот голову и ломаю, как сие сотварить...
С s9e/textformatter наверно не получится...
-
- phpBB 3.0.4
- Сообщения: 2215
- Стаж: 17 лет 4 месяца
- Откуда: Павлодар
- Благодарил (а): 2 раза
- Поблагодарили: 117 раз
Re: Как приучить к PHP 7.2?
Какая ошибка то?LCFSCS писал(а): 31.12.2018 0:11 Но она у меня вызывает ошибку. Правда я добавил функцию create_lambda не в конец (как в источнике), а после функции function bbcode_specialchars($text), которая уже есть - может быть из-за этого ошибка?
-
- phpBB 1.2.1
- Сообщения: 23
- Стаж: 6 лет 4 месяца
- Благодарил (а): 2 раза
Re: Как приучить к PHP 7.2?
Да уже не важно. Сделал я - всё работает.
Сначала решил воссоздать то, что в инструкции. Но получил синтаксическую ошибку в bbcode.php на последней строке файла ( ?php> ) - ясно, что не в этой строке дело...
Потом "смешал" своё и из инструкции и получил рабочий вариант - обрабатываются и новые теги, и старые (все - включая HIDE), не нужны ни какие манипуляции (перепарсинги, передобавления тегов, ковыряния в базе) - только заменить файлы (точнее код в файлах).
Протестю всё на трёх версиях PHP (5.6, 7.0, 7.2) и выложу полную инструкцию.
Спасибо всем, кто помогал или пытался помочь...
-
- phpBB 1.2.1
- Сообщения: 23
- Стаж: 6 лет 4 месяца
- Благодарил (а): 2 раза
Re: Как приучить к PHP 7.2?
Идеально работает на PHP 5.6 и PHP 7.0. На PHP 7.2 будете получать ошибки вида: Parameter must be an array or an object that implements Countable - но это уже сами допиливайте (руки бы оторвал - зачем постоянно убирать старые возможности из новых версий, а не сделать абсолютную совместимость?). Мне нужно несколько месяцев переконтоваться на PHP 7.0, после чего убежать с хостинга на сервер, где выставить нужную мне версию PHP, откатить до оригинальных файлов и забыть как страшный сон все эти обновления и допиливания.
К форуму прикручены prime links и свои теги, включая HIDE. Всё идеально работает на PHP 5.6 и PHP 7.0.
В версиях без данных "дополнений" и в других версиях код файлов может отличаться - но принцип тот же.
Всё закоментировано, чтобы потом можно было найти, изменить или вернуть к исходному коду. Обратите внимание, что в co*de и fl*ash добавлены звёздочи, чтобы данный форум нормально отображал код - эти звёздочки нужно будет убрать.
Файл /includes/acp/acp_bbcodes.php
Найти:
Код: Выделить всё
$replace = preg_replace('/(?<!\\\\)\$([0-9]+)/e', "'\${' . (\$1 + \$pad) . '}'", $replace);
Код: Выделить всё
/**
* Старая функция
$replace = preg_replace('/(?<!\\\\)\$([0-9]+)/e', "'\${' . (\$1 + \$pad) . '}'", $replace);
* Старая функция кончилась
*/
/**
* Замена
*/
$replace = preg_replace_callback('/(?<!\\\\)\$([0-9]+)/', function ($match) use ($pad) {
return '${' . ($match[1] + $pad) . '}';
}, $replace);
/**
* Замена кончилась
*/
Код: Выделить всё
$fp_match = preg_replace('#\[/?' . $bbcode_search . '#ie', "strtolower('\$0')", $fp_match);
$fp_replace = preg_replace('#\[/?' . $bbcode_search . '#ie', "strtolower('\$0')", $fp_replace);
$sp_match = preg_replace('#\[/?' . $bbcode_search . '#ie', "strtolower('\$0')", $sp_match);
$sp_replace = preg_replace('#\[/?' . $bbcode_search . '#ie', "strtolower('\$0')", $sp_replace);
Код: Выделить всё
/**
* Старая функция
$fp_match = preg_replace('#\[/?' . $bbcode_search . '#ie', "strtolower('\$0')", $fp_match);
$fp_replace = preg_replace('#\[/?' . $bbcode_search . '#ie', "strtolower('\$0')", $fp_replace);
$sp_match = preg_replace('#\[/?' . $bbcode_search . '#ie', "strtolower('\$0')", $sp_match);
$sp_replace = preg_replace('#\[/?' . $bbcode_search . '#ie', "strtolower('\$0')", $sp_replace);
* Старая функция кончилась
*/
/**
* Замена
*/
$fp_match = preg_replace_callback('#\[/?' . $bbcode_search . '#i', function ($match) {
return strtolower($match[0]);
}, $fp_match);
$fp_replace = preg_replace_callback('#\[/?' . $bbcode_search . '#i', function ($match) {
return strtolower($match[0]);
}, $fp_replace);
$sp_match = preg_replace_callback('#\[/?' . $bbcode_search . '#i', function ($match) {
return strtolower($match[0]);
}, $sp_match);
$sp_replace = preg_replace_callback('#\[/?' . $bbcode_search . '#i', function ($match) {
return strtolower($match[0]);
}, $sp_replace);
/**
* Замена кончилась
*/
Найти 5 таких одинаковых строк:
Код: Выделить всё
$error = preg_replace('#^([A-Z_]+)$#e', "(!empty(\$user->lang['\\1'])) ? \$user->lang['\\1'] : '\\1'", $error);
Код: Выделить всё
/**
* Старая функция
$error = preg_replace('#^([A-Z_]+)$#e', "(!empty(\$user->lang['\\1'])) ? \$user->lang['\\1'] : '\\1'", $error);
* Старая функция кончилась
*/
/**
* Замена
*/
$error = array_map(array($user, 'lang'), $error);
/**
* Замена кончилась
*/
Файл /includes/bbcode.php
Найти:
Код: Выделить всё
$message = preg_replace($preg['search'], $preg['replace'], $message);
Код: Выделить всё
/**
* Старая функция
$message = preg_replace($preg['search'], $preg['replace'], $message);
* Старая функция кончилась
*/
/**
* Замена
*/
foreach ($preg['search'] as $key => $search)
{
if (is_callable($preg['replace'][$key]))
{
$message = preg_replace_callback($search, $preg['replace'][$key], $message);
}
else
{
$message = preg_replace($search, $preg['replace'][$key], $message);
}
}
/**
* Замена концичась
*/
Код: Выделить всё
'#\[quote(?:="(.*?)")?:$uid\]((?!\[quote(?:=".*?")?:$uid\]).)?#ise' => "\$this->bbcode_second_pass_quote('\$1', '\$2')"
Код: Выделить всё
/**
* Замена
*/
'#\[quote(?:="(.*?)")?:$uid\]((?!\[quote(?:=".*?")?:$uid\]).)?#is' => function ($match) {
if (!isset($match[2]))
{
$match[2] = '';
}
return $this->bbcode_second_pass_quote($match[1], $match[2]);
},
/**
* Замена кончилась
*/
/**
* Старая функция
'#\[quote(?:="(.*?)")?:$uid\]((?!\[quote(?:=".*?")?:$uid\]).)?#ise' => "\$this->bbcode_second_pass_quote('\$1', '\$2')"
* Старая функция кончилась
*/
Код: Выделить всё
'#\[co*de(?:=([a-z]+))?:$uid\](.*?)\[/co*de:$uid\]#ise' => "\$this->bbcode_second_pass_code('\$1', '\$2')",
Код: Выделить всё
/**
* Замена
*/
'#\[co*de(?:=([a-z]+))?:$uid\](.*?)\[/co*de:$uid\]#is' => function ($match) {
return $this->bbcode_second_pass_code($match[1], $match[2]);
},
/**
* Замена кончилась
*/
/**
* Старая функция
'#\[co*de(?:=([a-z]+))?:$uid\](.*?)\[/co*de:$uid\]#ise' => "\$this->bbcode_second_pass_code('\$1', '\$2')",
* Старая функция кончилась
*/
Код: Выделить всё
'#\[list=([^\[]+):$uid\]#e' => "\$this->bbcode_list('\$1')",
Код: Выделить всё
/**
* Замена
*/
'#\[list=([^\[]+):$uid\]#' => function ($match) {
return $this->bbcode_list($match[1]);
},
/**
* Замена кончилась
*/
/**
* Старая функция
'#\[list=([^\[]+):$uid\]#e' => "\$this->bbcode_list('\$1')",
* Старая функция кончилась
*/
Код: Выделить всё
$bbcode_tpl = preg_replace('/{L_([A-Z_]+)}/e', "(!empty(\$user->lang['\$1'])) ? \$user->lang['\$1'] : ucwords(strtolower(str_replace('_', ' ', '\$1')))", $bbcode_tpl);
Код: Выделить всё
/**
* старая функция
$bbcode_tpl = preg_replace('/{L_([A-Z_]+)}/e', "(!empty(\$user->lang['\$1'])) ? \$user->lang['\$1'] : ucwords(strtolower(str_replace('_', ' ', '\$1')))", $bbcode_tpl);
* старая функция кончилась
*/
/**
* Замена
*/
$bbcode_tpl = preg_replace_callback('/{L_([A-Z0-9_]+)}/', function ($match) use ($user) {
return (!empty($user->lang[$match[1]])) ? $user->lang($match[1]) : ucwords(strtolower(str_replace('_', ' ', $match[1])));
}, $bbcode_tpl);
/**
* Замена кончилась
*/
Код: Выделить всё
function bbcode_tpl_replace($tpl_name, $tpl)
{
global $user;
static $replacements = array(
'quote_username_open' => array('{USERNAME}' => '$1'),
'color' => array('{COLOR}' => '$1', '{TEXT}' => '$2'),
'size' => array('{SIZE}' => '$1', '{TEXT}' => '$2'),
'img' => array('{URL}' => '$1'),
'flash' => array('{WIDTH}' => '$1', '{HEIGHT}' => '$2', '{URL}' => '$3'),
'url' => array('{URL}' => '$1', '{DESCRIPTION}' => '$2'),
'email' => array('{EMAIL}' => '$1', '{DESCRIPTION}' => '$2')
);
$tpl = preg_replace('/{L_([A-Z_]+)}/e', "(!empty(\$user->lang['\$1'])) ? \$user->lang['\$1'] : ucwords(strtolower(str_replace('_', ' ', '\$1')))", $tpl);
if (!empty($replacements[$tpl_name]))
{
$tpl = strtr($tpl, $replacements[$tpl_name]);
}
return trim($tpl);
}
Код: Выделить всё
/**
* Старая функция
function bbcode_tpl_replace($tpl_name, $tpl)
{
global $user;
static $replacements = array(
'quote_username_open' => array('{USERNAME}' => '$1'),
'color' => array('{COLOR}' => '$1', '{TEXT}' => '$2'),
'size' => array('{SIZE}' => '$1', '{TEXT}' => '$2'),
'img' => array('{URL}' => '$1'),
'flash' => array('{WIDTH}' => '$1', '{HEIGHT}' => '$2', '{URL}' => '$3'),
'url' => array('{URL}' => '$1', '{DESCRIPTION}' => '$2'),
'email' => array('{EMAIL}' => '$1', '{DESCRIPTION}' => '$2')
);
$tpl = preg_replace('/{L_([A-Z_]+)}/e', "(!empty(\$user->lang['\$1'])) ? \$user->lang['\$1'] : ucwords(strtolower(str_replace('_', ' ', '\$1')))", $tpl);
if (!empty($replacements[$tpl_name]))
{
$tpl = strtr($tpl, $replacements[$tpl_name]);
}
return trim($tpl);
}
* Старая функция кончилась
*/
/**
* Замена
*/
function bbcode_tpl_replace($tpl_name, $tpl)
{
global $user;
static $replacements = array(
'quote_username_open' => array('{USERNAME}' => '$1'),
'color' => array('{COLOR}' => '$1', '{TEXT}' => '$2'),
'size' => array('{SIZE}' => '$1', '{TEXT}' => '$2'),
'img' => array('{URL}' => '$1'),
'flash' => array('{WIDTH}' => '$1', '{HEIGHT}' => '$2', '{URL}' => '$3'),
'url' => array('{URL}' => '$1', '{DESCRIPTION}' => '$2'),
'email' => array('{EMAIL}' => '$1', '{DESCRIPTION}' => '$2')
);
$tpl = preg_replace_callback('/{L_([A-Z0-9_]+)}/', function ($match) use ($user) {
return (!empty($user->lang[$match[1]])) ? $user->lang($match[1]) : ucwords(strtolower(str_replace('_', ' ', $match[1])));
}, $tpl);
if (!empty($replacements[$tpl_name]))
{
$tpl = strtr($tpl, $replacements[$tpl_name]);
}
return trim($tpl);
}
/**
* Замена кончилась
*/
Код: Выделить всё
}
?>
Код: Выделить всё
/**
* Добавление без замены
*/
/**
* Function to perform custom bbcode second pass by extensions
* can be used to assign bbcode pattern replacement
* Example: '#\[list=([^\[]+):$uid\]#e' => "\$this->bbcode_second_pass_by_extension('\$1')"
*
* Accepts variable number of parameters
*
* @return mixed Second pass result
*/
function bbcode_second_pass_by_extension()
{
global $phpbb_dispatcher;
$return = false;
$params_array = func_get_args();
/**
* Event to perform bbcode second pass with
* the custom validating methods provided by extensions
*
* @event core.bbcode_second_pass_by_extension
* @var array params_array Array with the function parameters
* @var mixed return Second pass result to return
*
* @since 3.1.5-RC1
*/
$vars = array('params_array', 'return');
extract($phpbb_dispatcher->trigger_event('core.bbcode_second_pass_by_extension', compact($vars)));
return $return;
}
/**
* Добавление без замены кончилось
*/
Найти:
Код: Выделить всё
$this->message = preg_replace($regexp, $replacement, $this->message);
Код: Выделить всё
/**
* Старая функция
$this->message = preg_replace($regexp, $replacement, $this->message);
* Старая функция кончилась
*/
/**
* Замена
*/
if (is_callable($replacement))
{
$this->message = preg_replace_callback($regexp, $replacement, $this->message);
}
// @todo REMOVE for 3.2.0
else if (version_compare(PHP_VERSION, '7.0.0', '>='))
{
$regexp_modifiers = preg_replace('/!(.*)!([a-z]*)/', '$2', $regexp);
if (strpos($regexp_modifiers, 'e') !== false)
{
$regexp = preg_replace('/!(.*)!([a-z]*)/', '!$1!', $regexp);
$this->message = preg_replace_callback(
$regexp . str_replace('e', '', $regexp_modifiers),
create_lambda('$matches', 'return ' . preg_replace('#\$\{([\d])\}#ui', '\'.$matches[$1].\'', str_replace('$this->', '', $replacement)) . ';'),
$this->message
);
}
else
{
$this->message = preg_replace($regexp, $replacement, $this->message);
}
}
else
{
$this->message = preg_replace($regexp, $replacement, $this->message);
}
/**
* Замена кончилась
*/
Код: Выделить всё
function bbcode_init($allow_custom_bbcode = true)
{
static $rowset;
Код: Выделить всё
function bbcode_init($allow_custom_bbcode = true)
{
static $rowset;
/**
* Замена без старой функции - добавление
*/
$bbcode_class = $this;
/**
* Замена кончилась
*/
Код: Выделить всё
'code' => array('bbcode_id' => 8, 'regexp' => array('#\[co*de(?:=([a-z]+))?\](.+\[/co*de\])#uise' => "\$this->bbcode_code('\$1', '\$2')")),
'quote' => array('bbcode_id' => 0, 'regexp' => array('#\[quote(?:="(.*?)")?\](.+)\[/quote\]#uise' => "\$this->bbcode_quote('\$0')")),
'attachment' => array('bbcode_id' => 12, 'regexp' => array('#\[attachment=([0-9]+)\](.*?)\[/attachment\]#uise' => "\$this->bbcode_attachment('\$1', '\$2')")),
'b' => array('bbcode_id' => 1, 'regexp' => array('#\[b\](.*?)\[/b\]#uise' => "\$this->bbcode_strong('\$1')")),
'i' => array('bbcode_id' => 2, 'regexp' => array('#\[i\](.*?)\[/i\]#uise' => "\$this->bbcode_italic('\$1')")),
'url' => array('bbcode_id' => 3, 'regexp' => array('#\[url(=(.*))?\](?(1)((?s).*(?-s))|(.*))\[/url\]#uiUe' => "\$this->validate_url('\$2', ('\$3') ? '\$3' : '\$4')")),
'img' => array('bbcode_id' => 4, 'regexp' => array('#\[img\](.*)\[/img\]#uiUe' => "\$this->bbcode_img('\$1')")),
'size' => array('bbcode_id' => 5, 'regexp' => array('#\[size=([\-\+]?\d+)\](.*?)\[/size\]#uise' => "\$this->bbcode_size('\$1', '\$2')")),
'color' => array('bbcode_id' => 6, 'regexp' => array('!\[color=(#[0-9a-f]{3}|#[0-9a-f]{6}|[a-z\-]+)\](.*?)\[/color\]!uise' => "\$this->bbcode_color('\$1', '\$2')")),
'u' => array('bbcode_id' => 7, 'regexp' => array('#\[u\](.*?)\[/u\]#uise' => "\$this->bbcode_underline('\$1')")),
'list' => array('bbcode_id' => 9, 'regexp' => array('#\[list(?:=(?:[a-z0-9]|disc|circle|square))?].*\[/list]#uise' => "\$this->bbcode_parse_list('\$0')")),
'email' => array('bbcode_id' => 10, 'regexp' => array('#\[email=?(.*?)?\](.*?)\[/email\]#uise' => "\$this->validate_email('\$1', '\$2')")),
'flash' => array('bbcode_id' => 11, 'regexp' => array('#\[fl*ash=([0-9]+),([0-9]+)\](.*?)\[/fl*ash\]#uie' => "\$this->bbcode_flash('\$1', '\$2', '\$3')"))
Код: Выделить всё
/**
* Старая функция
'code' => array('bbcode_id' => 8, 'regexp' => array('#\[code(?:=([a-z]+))?\](.+\[/code\])#uise' => "\$this->bbcode_code('\$1', '\$2')")),
'quote' => array('bbcode_id' => 0, 'regexp' => array('#\[quote(?:="(.*?)")?\](.+)\[/quote\]#uise' => "\$this->bbcode_quote('\$0')")),
'attachment' => array('bbcode_id' => 12, 'regexp' => array('#\[attachment=([0-9]+)\](.*?)\[/attachment\]#uise' => "\$this->bbcode_attachment('\$1', '\$2')")),
'b' => array('bbcode_id' => 1, 'regexp' => array('#\[b\](.*?)\[/b\]#uise' => "\$this->bbcode_strong('\$1')")),
'i' => array('bbcode_id' => 2, 'regexp' => array('#\[i\](.*?)\[/i\]#uise' => "\$this->bbcode_italic('\$1')")),
'url' => array('bbcode_id' => 3, 'regexp' => array('#\[url(=(.*))?\](?(1)((?s).*(?-s))|(.*))\[/url\]#uiUe' => "\$this->validate_url('\$2', ('\$3') ? '\$3' : '\$4')")),
'img' => array('bbcode_id' => 4, 'regexp' => array('#\[img\](.*)\[/img\]#uiUe' => "\$this->bbcode_img('\$1')")),
'size' => array('bbcode_id' => 5, 'regexp' => array('#\[size=([\-\+]?\d+)\](.*?)\[/size\]#uise' => "\$this->bbcode_size('\$1', '\$2')")),
'color' => array('bbcode_id' => 6, 'regexp' => array('!\[color=(#[0-9a-f]{3}|#[0-9a-f]{6}|[a-z\-]+)\](.*?)\[/color\]!uise' => "\$this->bbcode_color('\$1', '\$2')")),
'u' => array('bbcode_id' => 7, 'regexp' => array('#\[u\](.*?)\[/u\]#uise' => "\$this->bbcode_underline('\$1')")),
'list' => array('bbcode_id' => 9, 'regexp' => array('#\[list(?:=(?:[a-z0-9]|disc|circle|square))?].*\[/list]#uise' => "\$this->bbcode_parse_list('\$0')")),
'email' => array('bbcode_id' => 10, 'regexp' => array('#\[email=?(.*?)?\](.*?)\[/email\]#uise' => "\$this->validate_email('\$1', '\$2')")),
'flash' => array('bbcode_id' => 11, 'regexp' => array('#\[fl*ash=([0-9]+),([0-9]+)\](.*?)\[/fl*ash\]#uie' => "\$this->bbcode_flash('\$1', '\$2', '\$3')"))
* Старая функция кончилась
*/
/**
* Замена
*/
'code' => array('bbcode_id' => 8, 'regexp' => array('#\[co*de(?:=([a-z]+))?\](.+\[/co*de\])#uis' => function ($match) use($bbcode_class)
{
return $bbcode_class->bbcode_code($match[1], $match[2]);
}
)),
'quote' => array('bbcode_id' => 0, 'regexp' => array('#\[quote(?:="(.*?)")?\](.+)\[/quote\]#uis' => function ($match) use($bbcode_class)
{
return $bbcode_class->bbcode_quote($match[0], 'quote');
}
)),
'attachment' => array('bbcode_id' => 12, 'regexp' => array('#\[attachment=([0-9]+)\](.*?)\[/attachment\]#uis' => function ($match) use($bbcode_class)
{
return $bbcode_class->bbcode_attachment($match[1], $match[2]);
}
)),
'b' => array('bbcode_id' => 1, 'regexp' => array('#\[b\](.*?)\[/b\]#uis' => function ($match) use($bbcode_class)
{
return $bbcode_class->bbcode_strong($match[1]);
}
)),
'i' => array('bbcode_id' => 2, 'regexp' => array('#\[i\](.*?)\[/i\]#uis' => function ($match) use($bbcode_class)
{
return $bbcode_class->bbcode_italic($match[1]);
}
)),
'url' => array('bbcode_id' => 3, 'regexp' => array('#\[url(=(.*))?\](?(1)((?s).*(?-s))|(.*))\[/url\]#uiU' => function ($match) use($bbcode_class)
{
return $bbcode_class->validate_url($match[2], ($match[3]) ? $match[3] : $match[4]);
}
)),
'img' => array('bbcode_id' => 4, 'regexp' => array('#\[img\](.*)\[/img\]#uiU' => function ($match) use($bbcode_class)
{
return $bbcode_class->bbcode_img($match[1]);
}
)),
'size' => array('bbcode_id' => 5, 'regexp' => array('#\[size=([\-\+]?\d+)\](.*?)\[/size\]#uis' => function ($match) use($bbcode_class)
{
return $bbcode_class->bbcode_size($match[1], $match[2]);
}
)),
'color' => array('bbcode_id' => 6, 'regexp' => array('!\[color=(#[0-9a-f]{3}|#[0-9a-f]{6}|[a-z\-]+)\](.*?)\[/color\]!uis' => function ($match) use($bbcode_class)
{
return $bbcode_class->bbcode_color($match[1], $match[2]);
}
)),
'u' => array('bbcode_id' => 7, 'regexp' => array('#\[u\](.*?)\[/u\]#uis' => function ($match) use($bbcode_class)
{
return $bbcode_class->bbcode_underline($match[1]);
}
)),
'list' => array('bbcode_id' => 9, 'regexp' => array('#\[list(?:=(?:[a-z0-9]|disc|circle|square))?].*\[/list]#uis' => function ($match) use($bbcode_class)
{
return $bbcode_class->bbcode_parse_list($match[0]);
}
)),
'email' => array('bbcode_id' => 10, 'regexp' => array('#\[email=?(.*?)?\](.*?)\[/email\]#uis' => function ($match) use($bbcode_class)
{
return $bbcode_class->validate_email($match[1], $match[2]);
}
)),
'flash' => array('bbcode_id' => 11, 'regexp' => array('#\[fl*ash=([0-9]+),([0-9]+)\](.*?)\[/fl*ash\]#ui' => function ($match) use($bbcode_class)
{
return $bbcode_class->bbcode_flash($match[1], $match[2], $match[3]);
}
))
/**
* Замена кончилась
*/
Код: Выделить всё
$in = preg_replace('#quote="(.*?)"\]#ie', "'quote="' . str_replace(array('[', ']', '\\\"'), array('[', ']', '\"'), '\$1') . '"]'", $in);
Код: Выделить всё
/**
* Старая функция
$in = preg_replace('#quote="(.*?)"\]#ie', "'quote="' . str_replace(array('[', ']', '\\\"'), array('[', ']', '\"'), '\$1') . '"]'", $in);
* Старая функция кончилась
*/
/**
* Замена
*/
$in = preg_replace_callback('#quote="(.*?)"\]#i', function ($match) {
return 'quote="' . str_replace(array('[', ']', '\\\"'), array('[', ']', '\"'), $match[1]) . '"]';
}, $in);
/**
* Замена кончилась
*/
Код: Выделить всё
$this->message = preg_replace('#\[attachment=([0-9]+)\](.*?)\[\/attachment\]#e', "'[attachment='.(\\1 + 1).']\\2[/attachment]'", $this->message);
Код: Выделить всё
/**
* Старая функция
$this->message = preg_replace('#\[attachment=([0-9]+)\](.*?)\[\/attachment\]#e', "'[attachment='.(\\1 + 1).']\\2[/attachment]'", $this->message);
* Старая функция кончилась
*/
/**
* Замена
*/
$this->message = preg_replace_callback('#\[attachment=([0-9]+)\](.*?)\[\/attachment\]#', function ($match) {
return '[attachment='.($match[1] + 1).']' . $match[2] . '[/attachment]';
}, $this->message);
/**
* Замена кончилась
*/
Код: Выделить всё
$this->message = preg_replace('#\[attachment=([0-9]+)\](.*?)\[\/attachment\]#e', "(\\1 == \$index) ? '' : ((\\1 > \$index) ? '[attachment=' . (\\1 - 1) . ']\\2[/attachment]' : '\\0')", $this->message);
Код: Выделить всё
/**
* Старая функция
$this->message = preg_replace('#\[attachment=([0-9]+)\](.*?)\[\/attachment\]#e', "(\\1 == \$index) ? '' : ((\\1 > \$index) ? '[attachment=' . (\\1 - 1) . ']\\2[/attachment]' : '\\0')", $this->message);
* Старая функция кончилась
*/
/**
* Замена
*/
$this->message = preg_replace_callback('#\[attachment=([0-9]+)\](.*?)\[\/attachment\]#', function ($match) use($index) {
return ($match[1] == $index) ? '' : (($match[1] > $index) ? '[attachment=' . ($match[1] - 1) . ']' . $match[2] . '[/attachment]' : $match[0]);
}, $this->message);
/**
* Замена кончилась
*/
Код: Выделить всё
$this->message = preg_replace('#\[attachment=([0-9]+)\](.*?)\[\/attachment\]#e', "'[attachment='.(\\1 + 1).']\\2[/attachment]'", $this->message);
Код: Выделить всё
/**
* Старая функция
$this->message = preg_replace('#\[attachment=([0-9]+)\](.*?)\[\/attachment\]#e', "'[attachment='.(\\1 + 1).']\\2[/attachment]'", $this->message);
* Старая функция кончилась
*/
/**
* Замена
*/
$this->message = preg_replace_callback('#\[attachment=([0-9]+)\](.*?)\[\/attachment\]#', function ($match) {
return '[attachment=' . ($match[1] + 1) . ']' . $match[2] . '[/attachment]';
}, $this->message);
/**
* Замена кончилась
*/
Код: Выделить всё
?>
Код: Выделить всё
/**
* Добалление без замены
*/
/**
* Transform some characters in valid bbcodes
* Called from preg_replace_callback function
* @todo REMOVE for 3.2.0
*/
function bbcode_specialchars($text)
{
$str_from = array('<', '>', '[', ']', '.', ':');
$str_to = array('<', '>', '[', ']', '.', ':');
return str_replace($str_from, $str_to, $text);
}
/**
* Caching for create_function
* @todo REMOVE for 3.2.0
*/
function create_lambda($args, $code) {
static $func;
if (!isset($func[$args][$code])) {
$func[$args][$code] = create_function($args, $code);
}
return $func[$args][$code];
}
/**
* Добалление без замены кончилось
*/
?>
Найти:
Код: Выделить всё
$text = preg_replace('/&#(\d+);/me', 'chr($1)', $text); //decimal notation
$text = preg_replace('/&#x([a-f0-9]+);/mei', 'chr(0x$1)', $text); //hex notation
Код: Выделить всё
/**
* Старая функция
$text = preg_replace('/&#(\d+);/me', 'chr($1)', $text); //decimal notation
$text = preg_replace('/&#x([a-f0-9]+);/mei', 'chr(0x$1)', $text); //hex notation
* Старая функция кончилась
*/
/**
* Замена
*/
$text = preg_replace_callback('/&#(\d+);/m', function ($matches) {return chr($matches[1]);}, $text); //decimal notation
$text = preg_replace_callback('/&#x([a-f0-9]+);/mi', function ($matches) {return chr('0x' . $matches[1]);}, $text); //hex notation
/**
* Замена кончилась
*/
Найти:
Код: Выделить всё
function make_clickable($text, $server_url = false, $class = 'postlink')
{
if ($server_url === false)
{
$server_url = generate_board_url();
}
static $magic_url_match;
static $magic_url_replace;
static $static_class;
if (!is_array($magic_url_match) || $static_class != $class)
{
$static_class = $class;
$class = ($static_class) ? ' class="' . $static_class . '"' : '';
$local_class = ($static_class) ? ' class="' . $static_class . '-local"' : '';
$magic_url_match = $magic_url_replace = array();
// Be sure to not let the matches cross over. ;)
// relative urls for this board
$magic_url_match[] = '#(^|[\n\t (>.])(' . preg_quote($server_url, '#') . ')/(' . get_preg_expression('relative_url_inline') . ')#ie';
$magic_url_replace[] = "make_clickable_callback(MAGIC_URL_LOCAL, '\$1', '\$2', '\$3', '$local_class')";
// matches a xxxx://aaaaa.bbb.cccc. ...
$magic_url_match[] = '#(^|[\n\t (>.])(' . get_preg_expression('url_inline') . ')#ie';
$magic_url_replace[] = "make_clickable_callback(MAGIC_URL_FULL, '\$1', '\$2', '', '$class')";
// matches a "www.xxxx.yyyy[/zzzz]" kinda lazy URL thing
$magic_url_match[] = '#(^|[\n\t (>])(' . get_preg_expression('www_url_inline') . ')#ie';
$magic_url_replace[] = "make_clickable_callback(MAGIC_URL_WWW, '\$1', '\$2', '', '$class')";
// matches an email@domain type address at the start of a line, or after a space or after what might be a BBCode.
$magic_url_match[] = '/(^|[\n\t (>])(' . get_preg_expression('email') . ')/ie';
$magic_url_replace[] = "make_clickable_callback(MAGIC_URL_EMAIL, '\$1', '\$2', '', '')";
}
return preg_replace($magic_url_match, $magic_url_replace, $text);
}
Код: Выделить всё
/**
* Старая функция
function make_clickable($text, $server_url = false, $class = 'postlink')
{
if ($server_url === false)
{
$server_url = generate_board_url();
}
static $magic_url_match;
static $magic_url_replace;
static $static_class;
if (!is_array($magic_url_match) || $static_class != $class)
{
$static_class = $class;
$class = ($static_class) ? ' class="' . $static_class . '"' : '';
$local_class = ($static_class) ? ' class="' . $static_class . '-local"' : '';
$magic_url_match = $magic_url_replace = array();
// Be sure to not let the matches cross over. ;)
// relative urls for this board
$magic_url_match[] = '#(^|[\n\t (>.])(' . preg_quote($server_url, '#') . ')/(' . get_preg_expression('relative_url_inline') . ')#ie';
$magic_url_replace[] = "make_clickable_callback(MAGIC_URL_LOCAL, '\$1', '\$2', '\$3', '$local_class')";
// matches a xxxx://aaaaa.bbb.cccc. ...
$magic_url_match[] = '#(^|[\n\t (>.])(' . get_preg_expression('url_inline') . ')#ie';
$magic_url_replace[] = "make_clickable_callback(MAGIC_URL_FULL, '\$1', '\$2', '', '$class')";
// matches a "www.xxxx.yyyy[/zzzz]" kinda lazy URL thing
$magic_url_match[] = '#(^|[\n\t (>])(' . get_preg_expression('www_url_inline') . ')#ie';
$magic_url_replace[] = "make_clickable_callback(MAGIC_URL_WWW, '\$1', '\$2', '', '$class')";
// matches an email@domain type address at the start of a line, or after a space or after what might be a BBCode.
$magic_url_match[] = '/(^|[\n\t (>])(' . get_preg_expression('email') . ')/ie';
$magic_url_replace[] = "make_clickable_callback(MAGIC_URL_EMAIL, '\$1', '\$2', '', '')";
}
return preg_replace($magic_url_match, $magic_url_replace, $text);
}
* Старая функция кончилась
*/
/**
* Замена
*/
function make_clickable($text, $server_url = false, $class = 'postlink')
{
if ($server_url === false)
{
$server_url = generate_board_url();
}
static $static_class;
static $magic_url_match_args;
if (!isset($magic_url_match_args[$server_url]) || $static_class != $class)
{
$static_class = $class;
$class = ($static_class) ? ' class="' . $static_class . '"' : '';
$local_class = ($static_class) ? ' class="' . $static_class . '-local"' : '';
if (!is_array($magic_url_match_args))
{
$magic_url_match_args = array();
}
// relative urls for this board
$magic_url_match_args[$server_url][] = array(
'#(^|[\n\t (>.])(' . preg_quote($server_url, '#') . ')/(' . get_preg_expression('relative_url_inline') . ')#iu',
MAGIC_URL_LOCAL,
$local_class,
);
// matches a xxxx://aaaaa.bbb.cccc. ...
$magic_url_match_args[$server_url][] = array(
'#(^|[\n\t (>.])(' . get_preg_expression('url_inline') . ')#iu',
MAGIC_URL_FULL,
$class,
);
// matches a "www.xxxx.yyyy[/zzzz]" kinda lazy URL thing
$magic_url_match_args[$server_url][] = array(
'#(^|[\n\t (>])(' . get_preg_expression('www_url_inline') . ')#iu',
MAGIC_URL_WWW,
$class,
);
// matches an email@domain type address at the start of a line, or after a space or after what might be a BBCode.
$magic_url_match_args[$server_url][] = array(
'/(^|[\n\t (>])(' . get_preg_expression('email') . ')/iu',
MAGIC_URL_EMAIL,
'',
);
}
foreach ($magic_url_match_args[$server_url] as $magic_args)
{
if (preg_match($magic_args[0], $text, $matches))
{
$text = preg_replace_callback($magic_args[0], function($matches) use ($magic_args)
{
$relative_url = isset($matches[3]) ? $matches[3] : '';
return make_clickable_callback($magic_args[1], $matches[1], $matches[2], $relative_url, $magic_args[2]);
}, $text);
}
}
return $text;
}
/**
* Замена кончилась
*/
Найти:
Код: Выделить всё
preg_replace('#^((RULE|ACTION|CHECK)_([A-Z0-9_]+))$#e', "\${strtolower('\\2') . '_lang'}[constant('\\1')] = \$user->lang['PM_\\2']['\\3']", array_keys(get_defined_constants()));
Код: Выделить всё
/**
* Старая функция
preg_replace('#^((RULE|ACTION|CHECK)_([A-Z0-9_]+))$#e', "\${strtolower('\\2') . '_lang'}[constant('\\1')] = \$user->lang['PM_\\2']['\\3']", array_keys(get_defined_constants()));
* Старая функция кончилась
*/
/**
* Замена
*/
preg_replace_callback('#^((RULE|ACTION|CHECK)_([A-Z0-9_]+))$#', function ($match) use(&$rule_lang, &$action_lang, &$check_lang, $user) {
${strtolower($match[2]) . '_lang'}[constant($match[1])] = $user->lang['PM_' . $match[2]][$match[3]];
}, array_keys(get_defined_constants()));
/**
* Замена кончилась
*/
Найти 2 строки с кодом:
Код: Выделить всё
$error = preg_replace('#^([A-Z_]+)$#e', "(!empty(\$user->lang['\\1'])) ? \$user->lang['\\1'] : '\\1'", $error);
Код: Выделить всё
/**
* Старая функция
$error = preg_replace('#^([A-Z_]+)$#e', "(!empty(\$user->lang['\\1'])) ? \$user->lang['\\1'] : '\\1'", $error);
* Старая функция кончилась
*/
/**
* Замена
*/
$error = array_map(array($user, 'lang'), $error);
/**
* Замена кончилась
*/
Найти 4 строки с кодом:
Код: Выделить всё
$error = preg_replace('#^([A-Z_]+)$#e', "(!empty(\$user->lang['\\1'])) ? \$user->lang['\\1'] : '\\1'", $error);
Код: Выделить всё
/**
* Старая функция
$error = preg_replace('#^([A-Z_]+)$#e', "(!empty(\$user->lang['\\1'])) ? \$user->lang['\\1'] : '\\1'", $error);
* Старая функция кончилась
*/
/**
* Замена
*/
$error = array_map(array($user, 'lang'), $error);
/**
* Замена кончилась
*/
Найти:
Код: Выделить всё
$error = preg_replace('#^([A-Z_]+)$#e', "(!empty(\$user->lang['\\1'])) ? \$user->lang['\\1'] : '\\1'", $error);
Код: Выделить всё
/**
* Старая функция
$error = preg_replace('#^([A-Z_]+)$#e', "(!empty(\$user->lang['\\1'])) ? \$user->lang['\\1'] : '\\1'", $error);
* Старая функция кончилась
*/
/**
* Замена
*/
$error = array_map(array($user, 'lang'), $error);
/**
* Замена кончилась
*/
Найти:
Код: Выделить всё
$instance =& new phpbb_captcha_gd();
Код: Выделить всё
/**
* Старая функция
$instance =& new phpbb_captcha_gd();
* Старая функция кончилась
*/
/**
* Замена
*/
$instance = new phpbb_captcha_gd();
/**
* Замена кончилась
*/
Найти:
Код: Выделить всё
$instance =& new phpbb_captcha_nogd();
Код: Выделить всё
/**
* Старая функция
$instance =& new phpbb_captcha_nogd();
* Старая функция кончилась
*/
/**
* Замена
*/
$instance = new phpbb_captcha_nogd();
/**
* Замена кончилась
*/
Найти:
Код: Выделить всё
$instance =& new phpbb_captcha_qa();
Код: Выделить всё
/**
* Старая функция
$instance =& new phpbb_captcha_qa();
* Старая функция кончилась
*/
/**
* Замена
*/
$instance = new phpbb_captcha_qa();
/**
* Замена кончилась
*/
Найти:
Код: Выделить всё
$instance =& new phpbb_recaptcha();
Код: Выделить всё
/**
* Старая функция
$instance =& new phpbb_recaptcha();
* Старая функция кончилась
*/
/**
* Замена
*/
$instance = new phpbb_recaptcha();
/**
* Замена кончилась
*/
Код: Выделить всё
php_value mbstring.http_input pass
php_value mbstring.http_output pass
Вот и всё. Удачи... Если найду ещё что-то, что нужно заменить - дополню.
-
- Former team member
- Сообщения: 2233
- Стаж: 16 лет 4 месяца
- Благодарил (а): 142 раза
- Поблагодарили: 140 раз
Re: Как приучить к PHP 7.2?
Код: Выделить всё
Error 4096: Object of class template could not be converted to string at file /includes/functions_messenger.php line 212
Код: Выделить всё
$this->tpl_msg[$template_lang . $template_file] = new template();