Проблемы при цитировании

Проблемы с установкой или работой phpBB 3.0.x? Получите помощь здесь!
С 1 января 2017 года phpBB Group прекращает поддержку phpBB версии 3.0.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.0 до 1 июля 2017 года.
Подробнее: Окончание поддержки phpBB 3.0.
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды

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

Re: Проблемы при цитировании

Сообщение nissin »

hoster.ru?
К сожалению проблема данной правкой не решилась.
Пока поставил в .htaccess (так вроде пореже глючит):

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

php_value mbstring.internal_encoding none
Rei
phpBB 1.4.1
Сообщения: 47
Стаж: 15 лет 7 месяцев
Благодарил (а): 13 раз
Поблагодарили: 1 раз

Re: Проблемы при цитировании

Сообщение Rei »

hoster.ru?
Да

Добавлено спустя 15 минут 44 секунды:
nissin писал(а):(так вроде пореже глючит)
Пробую править заглюченные сообщения. Безрезультатно.
Аватара пользователя
nissin
phpBB 3.0.4
Сообщения: 2229
Стаж: 18 лет 9 месяцев
Откуда: Астана
Благодарил (а): 7 раз
Поблагодарили: 344 раза

Re: Проблемы при цитировании

Сообщение nissin »

Соорудил вот такой костыль.
OPEN includes/functions.php
FIND ADD BEFORE

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

function phpbb_substr($s, $from, $len = NULL)
{
	if ($len !== NULL)
	{
		return function_exists('mb_orig_substr') ? mb_orig_substr($s, $from, $len) : substr($s, $from, $len);
	}
	else
	{
		return function_exists('mb_orig_substr') ? mb_orig_substr($s, $from) : substr($s, $from);
	}
}
OPEN includes/message_parser.php
FIND

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

			$buffer .= substr($in, 0, $pos);
REPLACE WITH

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

			$buffer .= phpbb_substr($in, 0, $pos);
Причина предварительно связана со следующим неподтверждённым багом в PHP:
http://bugs.php.net/bug.php?id=45311
При вызове mb_internal_encoding('UTF-8'); с какого-то перепуга иногда перегружается функция substr.
Переписать все вызовы substr просто нереально, поэтому исправил только в одном критичном месте.
Кстати, тест показал, что и другие строковые функции подвержены подобной перегрузке.
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 17273
Стаж: 20 лет 4 месяца
Откуда: Красноярск
Благодарил (а): 633 раза
Поблагодарили: 2413 раз

Re: Проблемы при цитировании

Сообщение rxu »

mb_orig_substr - что это?
nissin писал(а):с какого-то перепуга иногда перегружается функция substr.
В каком смысле перегружается? Вызывается другая?
Изображение
Rei
phpBB 1.4.1
Сообщения: 47
Стаж: 15 лет 7 месяцев
Благодарил (а): 13 раз
Поблагодарили: 1 раз

Re: Проблемы при цитировании

Сообщение Rei »

При новых цитированиях проблемы не возникало пока, но отредактировать старые сообщения не получилось. Кэш чистил. В любом случае большое спасибо за помощь!
Аватара пользователя
nissin
phpBB 3.0.4
Сообщения: 2229
Стаж: 18 лет 9 месяцев
Откуда: Астана
Благодарил (а): 7 раз
Поблагодарили: 344 раза

Re: Проблемы при цитировании

Сообщение nissin »

rxu
http://php.net/manual/en/mbstring.overload.php
В данном случае перегрузка происходит случайным образом, причина мне не понятна.
Когда mbstring перегружает стандартные функции, то оригинальные меняет с префиксом mb_orig_.
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 17273
Стаж: 20 лет 4 месяца
Откуда: Красноярск
Благодарил (а): 633 раза
Поблагодарили: 2413 раз

Re: Проблемы при цитировании

Сообщение rxu »

nissin писал(а):Когда mbstring перегружает стандартные функции, то оригинальные меняет с префиксом mb_orig_.
Интересно. Где это описано?
Изображение
Аватара пользователя
nissin
phpBB 3.0.4
Сообщения: 2229
Стаж: 18 лет 9 месяцев
Откуда: Астана
Благодарил (а): 7 раз
Поблагодарили: 344 раза

Re: Проблемы при цитировании

Сообщение nissin »

В исходных текстах php...
ext/mbstring/mbstring.c

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

/* {{{ mb_overload_def mb_ovld[] */
static const struct mb_overload_def mb_ovld[] = {
	{MB_OVERLOAD_MAIL, "mail", "mb_send_mail", "mb_orig_mail"},
	{MB_OVERLOAD_STRING, "strlen", "mb_strlen", "mb_orig_strlen"},
	{MB_OVERLOAD_STRING, "strpos", "mb_strpos", "mb_orig_strpos"},
	{MB_OVERLOAD_STRING, "strrpos", "mb_strrpos", "mb_orig_strrpos"},
	{MB_OVERLOAD_STRING, "stripos", "mb_stripos", "mb_orig_stripos"},
	{MB_OVERLOAD_STRING, "strripos", "mb_strripos", "mb_orig_stripos"},
	{MB_OVERLOAD_STRING, "strstr", "mb_strstr", "mb_orig_strstr"},
	{MB_OVERLOAD_STRING, "strrchr", "mb_strrchr", "mb_orig_strrchr"},
	{MB_OVERLOAD_STRING, "stristr", "mb_stristr", "mb_orig_stristr"},
	{MB_OVERLOAD_STRING, "substr", "mb_substr", "mb_orig_substr"},
	{MB_OVERLOAD_STRING, "strtolower", "mb_strtolower", "mb_orig_strtolower"},
	{MB_OVERLOAD_STRING, "strtoupper", "mb_strtoupper", "mb_orig_strtoupper"},
	{MB_OVERLOAD_STRING, "substr_count", "mb_substr_count", "mb_orig_substr_count"},
#if HAVE_MBREGEX
	{MB_OVERLOAD_REGEX, "ereg", "mb_ereg", "mb_orig_ereg"},
	{MB_OVERLOAD_REGEX, "eregi", "mb_eregi", "mb_orig_eregi"},
	{MB_OVERLOAD_REGEX, "ereg_replace", "mb_ereg_replace", "mb_orig_ereg_replace"},
	{MB_OVERLOAD_REGEX, "eregi_replace", "mb_eregi_replace", "mb_orig_eregi_replace"},
	{MB_OVERLOAD_REGEX, "split", "mb_split", "mb_orig_split"},
#endif
	{0, NULL, NULL, NULL}
}; 
/* }}} */
Недокументировано, но вполне работает.

Вот нашёл другой вариант (более документированный):
http://stackoverflow.com/questions/1697 ... verload-on
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 17273
Стаж: 20 лет 4 месяца
Откуда: Красноярск
Благодарил (а): 633 раза
Поблагодарили: 2413 раз

Re: Проблемы при цитировании

Сообщение rxu »

nissin
Спасибо, классная находка.
Изображение
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 17273
Стаж: 20 лет 4 месяца
Откуда: Красноярск
Благодарил (а): 633 раза
Поблагодарили: 2413 раз

Re: Проблемы при цитировании

Сообщение rxu »

Видимо, данная проблема не будет учтена в коде сама по себе, т.е. исправления не будет, т.к. phpBB не поддерживает системы с включенной перегрузкой функций для mbstring. Вместо этого будет реализована проверка на соответствие серверным требованиям на главной странице админраздела, с уведомлением в случае несоответствия.
Изображение
Аватара пользователя
nissin
phpBB 3.0.4
Сообщения: 2229
Стаж: 18 лет 9 месяцев
Откуда: Астана
Благодарил (а): 7 раз
Поблагодарили: 344 раза

Re: Проблемы при цитировании

Сообщение nissin »

Проблема в том что это баг в php/mbstring, mb_get_info() показывает что перегрузки нет.
А на деле она самопроизвольно включается по неизвестному принципу.

В общем сделал пример наглядно показывающий баг, и попросил хостера исправить.

Вернуться в «Поддержка phpBB 3.0.х»