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

Как приучить к PHP 7.2?

Вопросы без привязки к версии. Установлена авточистка (2 года).
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ | Как задавать вопросы | Как устанавливать расширения

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Аватара пользователя
nissin
phpBB 3.0.4
Сообщения: 2208
Стаж: 16 лет 3 месяца
Откуда: Павлодар
Благодарил (а): 7 раз
Поблагодарили: 338 раз
Контактная информация:

Re: Как приучить к PHP 7.2?

Сообщение nissin »

LCFSCS писал(а): 28.12.2018 23:12 Просмотрел все добавленные теги в админке - ни в одном нет модификаторов.
Посмотрите в БД.
Всё повторяется. nurlan.info
LCFSCS
phpBB 1.2.1
Сообщения: 23
Стаж: 5 лет 3 месяца
Благодарил (а): 3 раза
Поблагодарили: 1 раз

Re: Как приучить к PHP 7.2?

Сообщение LCFSCS »

nissin писал(а): 29.12.2018 10:18 Посмотрите в БД.
Действительно в базе сидит куча модификаторов:

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

13, 'center', 'Текст, выровненный по центру: [center]текст[/center]', 1, '[center]{TEXT}[/center]', '<div style=\"text-align:center;\">{TEXT}</div>', '!\\[center\\](.*?)\\[/center\\]!ies',
Риторически: Зачем так делать?... Ведь можно было без запихивания PHP кода в базу...

И с этим теперь ничего не сделать?
Придётся временно "отключить" "свои" теги (до переезда на сервак), либо пытаться реализовать функционал и дизайн на новой версии?
Аватара пользователя
nissin
phpBB 3.0.4
Сообщения: 2208
Стаж: 16 лет 3 месяца
Откуда: Павлодар
Благодарил (а): 7 раз
Поблагодарили: 338 раз
Контактная информация:

Re: Как приучить к PHP 7.2?

Сообщение nissin »

LCFSCS, ну вы же includes/acp/acp_bbcodes.php и includes/bbcode.php надеюсь правили?
Теперь нужно просто пересохранить все пользовательские bbcode.
Всё повторяется. nurlan.info
LCFSCS
phpBB 1.2.1
Сообщения: 23
Стаж: 5 лет 3 месяца
Благодарил (а): 3 раза
Поблагодарили: 1 раз

Re: Как приучить к PHP 7.2?

Сообщение LCFSCS »

nissin писал(а): 30.12.2018 1:40 ну вы же includes/acp/acp_bbcodes.php и includes/bbcode.php надеюсь правили?
Теперь нужно просто пересохранить все пользовательские bbcode.
Всё поправил (всё, что нашёл).
Сегодня передобавлю теги - отпишу результат.
Спасибо.
LCFSCS
phpBB 1.2.1
Сообщения: 23
Стаж: 5 лет 3 месяца
Благодарил (а): 3 раза
Поблагодарили: 1 раз

Re: Как приучить к PHP 7.2?

Сообщение LCFSCS »

nissin писал(а): 30.12.2018 1:40 Теперь нужно просто пересохранить все пользовательские bbcode.
Спасибо. Сработало. Нет ошибок, все теги работают. Но вот во всех старых сообщениях теги не обрабатываются (от есть отображаются тегами).
Как это можно исправить? (Пересохранить 70 тысячь сообщений в принципе возможно, но можно сойти с ума, да и, думаю, есть другой вариант... Полюбому уже встречалась такая проблема после обновлений)
Аватара пользователя
nissin
phpBB 3.0.4
Сообщения: 2208
Стаж: 16 лет 3 месяца
Откуда: Павлодар
Благодарил (а): 7 раз
Поблагодарили: 338 раз
Контактная информация:

Re: Как приучить к PHP 7.2?

Сообщение nissin »

LCFSCS, в STK есть репарсинг BBCodes.
Всё повторяется. nurlan.info
LCFSCS
phpBB 1.2.1
Сообщения: 23
Стаж: 5 лет 3 месяца
Благодарил (а): 3 раза
Поблагодарили: 1 раз

Re: Как приучить к PHP 7.2?

Сообщение LCFSCS »

nissin писал(а): 30.12.2018 23:13 в STK есть репарсинг BBCodes.
А это где/как?
---------------------------------------

Поторопился я радоваться... Заново добавил теги в 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\", \'\"\', \'&#39;\', \'&#40;\', \'&#41;\'), 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\", \'\"\', \'&#39;\', \'&#40;\', \'&#41;\'), trim(\'${1}\')).\'[/center:$uid]\'', '!\\[center:$uid\\](.*?)\\[/center:$uid\\]!s', '<div style=\"text-align:center;\">${1}</div>');
И в коде от версии 3.2.4 в includes/acp/acp_bbcodes.php также присутствуют модификаторы e.

Видимо, отн потом просто преображает данный модификатор в что-то иное. И не в ту степь копали - не нужно было передобавлять теги. Нужно заставить также преобразовывать модификатор.

Отправлено спустя 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];
+}
Но она у меня вызывает ошибку. Правда я добавил функцию create_lambda не в конец (как в источнике), а после функции function bbcode_specialchars($text), которая уже есть - может быть из-за этого ошибка?
Аватара пользователя
Татьяна5
Поддержка
Поддержка
Сообщения: 12372
Стаж: 12 лет 7 месяцев
Благодарил (а): 223 раза
Поблагодарили: 3517 раз
Контактная информация:

Re: Как приучить к PHP 7.2?

Сообщение Татьяна5 »

LCFSCS писал(а): 31.12.2018 0:11 Видимо, он потом просто преображает данный модификатор в что-то иное
В 3.2 тот код вообще не задействован, он оставлен для обратной совместимости. Там другой обработчик ббкодов
LCFSCS
phpBB 1.2.1
Сообщения: 23
Стаж: 5 лет 3 месяца
Благодарил (а): 3 раза
Поблагодарили: 1 раз

Re: Как приучить к PHP 7.2?

Сообщение LCFSCS »

Татьяна5 писал(а): 31.12.2018 0:56 В 3.2 тот код вообще не задействован, он оставлен для обратной совместимости. Там другой обработчик ббкодов
В 3.2 он также пихает в базу своих тегов модификаторы e. В моём предыдущем сообщении база бб-кодов VALUES (13, 'c'... из нулёвого чистого phpBB 3.2.4 установленного на чистую базу и без любых модификаций кода - это я ради теста добавил два своих кода, сохранил таблицу с этими кодами и открыл её.

Тот код - из инструкции по ссылке по приучению к PHP 7. Я имел в виду, что с помощью похожей функции можно реализовать "переделывание" модификаторов.
Аватара пользователя
Татьяна5
Поддержка
Поддержка
Сообщения: 12372
Стаж: 12 лет 7 месяцев
Благодарил (а): 223 раза
Поблагодарили: 3517 раз
Контактная информация:

Re: Как приучить к PHP 7.2?

Сообщение Татьяна5 »

LCFSCS писал(а): 31.12.2018 1:20пихает в базу
и потом нигде не использует
Там s9e/textformatter работает
LCFSCS
phpBB 1.2.1
Сообщения: 23
Стаж: 5 лет 3 месяца
Благодарил (а): 3 раза
Поблагодарили: 1 раз

Re: Как приучить к PHP 7.2?

Сообщение LCFSCS »

Я взял данную функцию из phpBB 3.2.4 из includes/message_parser.php

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

/**
	* 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-теги.

Если не убирать, то обрабатываются все BB-теги, но получаем ошибку из-за модификаторов из базы своих тегов.

Надо как-то убрать из $this->message = preg_replace модификаторы е - это либо перед данной функцией запихать функцию замены модификаторов, либо прикрутить s9e/textformatter. Вот голову и ломаю, как сие сотварить...

С s9e/textformatter наверно не получится...
Аватара пользователя
nissin
phpBB 3.0.4
Сообщения: 2208
Стаж: 16 лет 3 месяца
Откуда: Павлодар
Благодарил (а): 7 раз
Поблагодарили: 338 раз
Контактная информация:

Re: Как приучить к PHP 7.2?

Сообщение nissin »

LCFSCS писал(а): 31.12.2018 0:11 Но она у меня вызывает ошибку. Правда я добавил функцию create_lambda не в конец (как в источнике), а после функции function bbcode_specialchars($text), которая уже есть - может быть из-за этого ошибка?
Какая ошибка то?
LCFSCS
phpBB 1.2.1
Сообщения: 23
Стаж: 5 лет 3 месяца
Благодарил (а): 3 раза
Поблагодарили: 1 раз

Re: Как приучить к PHP 7.2?

Сообщение LCFSCS »

nissin писал(а): 31.12.2018 8:37 Какая ошибка то?
Да уже не важно. Сделал я - всё работает.

Сначала решил воссоздать то, что в инструкции. Но получил синтаксическую ошибку в bbcode.php на последней строке файла ( ?php> ) - ясно, что не в этой строке дело...

Потом "смешал" своё и из инструкции и получил рабочий вариант - обрабатываются и новые теги, и старые (все - включая HIDE), не нужны ни какие манипуляции (перепарсинги, передобавления тегов, ковыряния в базе) - только заменить файлы (точнее код в файлах).

Протестю всё на трёх версиях PHP (5.6, 7.0, 7.2) и выложу полную инструкцию.

Спасибо всем, кто помогал или пытался помочь...
LCFSCS
phpBB 1.2.1
Сообщения: 23
Стаж: 5 лет 3 месяца
Благодарил (а): 3 раза
Поблагодарили: 1 раз

Re: Как приучить к PHP 7.2?

Сообщение LCFSCS »

Вообщем вот полная инструкция по приучению phpBB 3.0.10 к PHP 7.0
Идеально работает на 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);
		/**
		* Замена кончилась
		*/
Файл /includes/acp/acp_users.php

Найти 5 таких одинаковых строк:

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

					$error = preg_replace('#^([A-Z_]+)$#e', "(!empty(\$user->lang['\\1'])) ? \$user->lang['\\1'] : '\\1'", $error);
И каждую из 5 строк заменить на:

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

					/**
					* Старая функция
					$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(?:=&quot;(.*?)&quot;)?:$uid\]((?!\[quote(?:=&quot;.*?&quot;)?:$uid\]).)?#ise'	=> "\$this->bbcode_second_pass_quote('\$1', '\$2')"
Заменить на:

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

							/**
							* Замена
							*/
							'#\[quote(?:=&quot;(.*?)&quot;)?:$uid\]((?!\[quote(?:=&quot;.*?&quot;)?:$uid\]).)?#is'	=> function ($match) {
								if (!isset($match[2]))
								{
									$match[2] = '';
								}

								return $this->bbcode_second_pass_quote($match[1], $match[2]);
							},
							/**
							* Замена кончилась
							*/
							
							/**
							* Старая функция
							'#\[quote(?:=&quot;(.*?)&quot;)?:$uid\]((?!\[quote(?:=&quot;.*?&quot;)?:$uid\]).)?#ise'	=> "\$this->bbcode_second_pass_quote('\$1', '\$2')"							
							* Старая функция кончилась
							*/
Найти, убрав звёздочки из co*de (добавлены, чтобы движок форума дал нормально вставить):

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

							'#\[co*de(?:=([a-z]+))?:$uid\](.*?)\[/co*de:$uid\]#ise'	=> "\$this->bbcode_second_pass_code('\$1', '\$2')",
Заменить на, убрав звёздочки из co*de (добавлены, чтобы движок форума дал нормально вставить):

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

							/**
							* Замена
							*/
							'#\[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;
	}
	
	/**
	* Добавление без замены кончилось
	*/
Файл /includes/message_parser.php

Найти:

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

						$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;
		/**
		* Замена кончилась
		*/
Найти, убрав звёздочки из co*de и fl*ash (добавлены, чтобы движок форума дал нормально вставить):

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

			'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(?:=&quot;(.*?)&quot;)?\](.+)\[/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')"))
Заменить на, убрав звёздочки из co*de и fl*ash (добавлены, чтобы движок форума дал нормально вставить):

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

		/**
		* Старая функция
			'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(?:=&quot;(.*?)&quot;)?\](.+)\[/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(?:=&quot;(.*?)&quot;)?\](.+)\[/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=&quot;(.*?)&quot;\]#ie', "'quote=&quot;' . str_replace(array('[', ']', '\\\"'), array('&#91;', '&#93;', '\"'), '\$1') . '&quot;]'", $in);
Заменить на:

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

		/**
		* Старая функция
		$in = preg_replace('#quote=&quot;(.*?)&quot;\]#ie', "'quote=&quot;' . str_replace(array('[', ']', '\\\"'), array('&#91;', '&#93;', '\"'), '\$1') . '&quot;]'", $in);
		* Старая функция кончилась
		*/

		/**
		* Замена
		*/
		$in = preg_replace_callback('#quote=&quot;(.*?)&quot;\]#i', function ($match) {
			return 'quote=&quot;' . str_replace(array('[', ']', '\\\"'), array('&#91;', '&#93;', '\"'), $match[1]) . '&quot;]';
		}, $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('&lt;', '&gt;', '&#91;', '&#93;', '&#46;', '&#58;');

	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];
}

/**
* Добалление без замены кончилось
*/
?>
Файл /includes/prime_links.php - если есть/прикручен Prime Links

Найти:

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

			$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
			/**
			* Замена кончилась
			*/
Файл /includes/functions_content.php

Найти:

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

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;
}
/**
* Замена кончилась
*/
Файл /includes/ucp/ucp_pm_options.php

Найти:

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

	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()));
	/**
	* Замена кончилась
	*/
Файл /includes/ucp/ucp_prefs.php

Найти 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);
					/**
					* Замена кончилась
					*/
Файл /includes/ucp/ucp_profile.php

Найти 4 строки с кодом:

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

					$error = preg_replace('#^([A-Z_]+)$#e', "(!empty(\$user->lang['\\1'])) ? \$user->lang['\\1'] : '\\1'", $error);
И все 4 строки заменить на:

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

					/**
					* Старая функция
					$error = preg_replace('#^([A-Z_]+)$#e', "(!empty(\$user->lang['\\1'])) ? \$user->lang['\\1'] : '\\1'", $error);
					* Старая функция кончилась
					*/

					/**
					* Замена
					*/
					$error = array_map(array($user, 'lang'), $error);
					/**
					* Замена кончилась
					*/
Файл /includes/ucp/ucp_register.php

Найти:

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

			$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\captcha\plugins\phpbb_captcha_gd_plugin.php

Найти:

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

		$instance =& new phpbb_captcha_gd();
Заменить на:

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

		/**
		* Старая функция
		$instance =& new phpbb_captcha_gd();
		* Старая функция кончилась
		*/

		/**
		* Замена
		*/
		$instance = new phpbb_captcha_gd();
		/**
		* Замена кончилась
		*/
Файл \includes\captcha\plugins\phpbb_captcha_nogd_plugin.php

Найти:

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

		$instance =& new phpbb_captcha_nogd();
Заменить на:

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

		/**
		* Старая функция
		$instance =& new phpbb_captcha_nogd();
		* Старая функция кончилась
		*/

		/**
		* Замена
		*/
		$instance = new phpbb_captcha_nogd();
		/**
		* Замена кончилась
		*/
Файл \includes\captcha\plugins\phpbb_captcha_qa_plugin.php

Найти:

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

		$instance =& new phpbb_captcha_qa();
Заменить на:

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

		/**
		* Старая функция
		$instance =& new phpbb_captcha_qa();
		* Старая функция кончилась
		*/

		/**
		* Замена
		*/
		$instance = new phpbb_captcha_qa();
		/**
		* Замена кончилась
		*/
Файл \includes\captcha\plugins\phpbb_recaptcha_plugin.php

Найти:

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

		$instance =& new phpbb_recaptcha();
Заменить на:

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

		/**
		* Старая функция
		$instance =& new phpbb_recaptcha();
		* Старая функция кончилась
		*/

		/**
		* Замена
		*/
		$instance = new phpbb_recaptcha();
		/**
		* Замена кончилась
		*/
Чтобы избавиться от "ошибки" в админке про "должен быть pass и т.д. (уже не помню)" в корневой файл .htaccess нужно добавить:

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

php_value mbstring.http_input pass
php_value mbstring.http_output pass

Вот и всё. Удачи... Если найду ещё что-то, что нужно заменить - дополню.
Shredder
Former team member
Сообщения: 2217
Стаж: 15 лет 3 месяца
Благодарил (а): 236 раз
Поблагодарили: 561 раз
Контактная информация:

Re: Как приучить к PHP 7.2?

Сообщение Shredder »

Тоже "приучаю" к PHP7. Всё получилось кроме: во время ответа в тему возникает ошибка:

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

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();
Ума не приложу, что с этим делать.
Ответить

Вернуться в «phpBB-пространство»