Intellect Board Pro
Расширяемый движок форума с разделами разных типов
Объявление
Вышла версия 3.05 с фотогалереей и поддержкой PostgreSQL и SQLite.
Перейти к скачиванию
Привет, гость!

Ошибки форума в версии PHP 7.3 / 7.4

Настройки отображения темы Показывать по сообщений с сортировкой .
Выводить , отправленные .
Страницы:
  • 1
  • 2
Распечатать
damisejker
Новичок
Всего сообщений: 21
Зарегистрирован: 24 июл. 2020 г., 19:04
Откуда: Варшава
Рейтинг пользователя: 0

0
. Редактировалось 2 раза, последний — #1
Добрый день,

Активировали на сайте версию PHP 7,3 в связи с миграцией старых скриптов на новейшие.

На главной форума появились ошибки: 


При попытке залогиниться наряду с сообщением о успешном входе выскакивает ещё ошибка: 


В любой теме форума видим такие ошибки:


Не могли бы Вы помочь разрешить эти баги?

4X_Pro
Основатель проекта
Всего сообщений: 401
Зарегистрирован: 22 сент. 2014 г., 18:56
Откуда: Москва, Перово
Рейтинг пользователя: 15

0
#2
Первая ошибка — из-за того, что для подсчёта скрытых пользователей не создаётся пустой массив, а новые версии PHP более строго относятся к проверкам типов. Исправление — в файле lib/online.php заменить строки
$result = array('online'=>array('team'=>array(),'users'=>array(),'bots'=>array(),'guests'=>array()), 'today'=>array('team'=>array(),'users'=>array(),'bots'=>array(),'guests'=>array()));
на
$result = array('online'=>array('team'=>array(),'users'=>array(),'bots'=>array(),'guests'=>array(),'hidden'=>array()), 'today'=>array('team'=>array(),'users'=>array(),'bots'=>array(),'guests'=>array(),'hidden'=>array()));
Файл прикладываю.
Прикрепленные файлы:

Критикуя — предлагай, предлагая — обосновывай!
4xpro.ru — мой личный сайт-мультиблог на Intellect Board.

4X_Pro
Основатель проекта
Всего сообщений: 401
Зарегистрирован: 22 сент. 2014 г., 18:56
Откуда: Москва, Перово
Рейтинг пользователя: 15

0
#3
Вторая ошибка: в файле app/app.php нужно функцию session (начинается на строке 844, заканчивается на 872) привести вот к такому виду:
/** Создание пользовательской сессии * */ function session() { if (!session_id()) { if (!defined('CONFIG_session')) define('CONFIG_session', 'ib_sid'); session_name(CONFIG_session); if (defined('CONFIG_session_path') && CONFIG_session_path) session_save_path(CONFIG_session_path); // если в настройках выставлено сохранение сессий в отдельный путь // TODO: возможно, вынести часть параметров сессии в конфиг session_set_cookie_params(false, $this->url('/'), false, !empty($_SERVER['HTTPS']), true); // последний параметр повышает безопасность cookies, делая их недоступными для JavaScript, если броузер пользователя такое поддерживает session_start(); } if (!isset($_SESSION['starttime'])) $_SESSION['starttime'] = $this->time; }
Прикрепленные файлы:

Критикуя — предлагай, предлагая — обосновывай!
4xpro.ru — мой личный сайт-мультиблог на Intellect Board.

4X_Pro
Основатель проекта
Всего сообщений: 401
Зарегистрирован: 22 сент. 2014 г., 18:56
Откуда: Москва, Перово
Рейтинг пользователя: 15

0
#4
Исправление для третьей ошибки — файл lib/bbcode.php.
Прикрепленные файлы:

Критикуя — предлагай, предлагая — обосновывай!
4xpro.ru — мой личный сайт-мультиблог на Intellect Board.

damisejker
Новичок
Всего сообщений: 21
Зарегистрирован: 24 июл. 2020 г., 19:04
Откуда: Варшава
Рейтинг пользователя: 0

0
#5
4X_Pro, спасибо за оказанную помощь. Получилось разрешить проблему с ошибками на главной форума и в логине. После замены третьего файла, количество ошибок уменьшилось, но не исчезло..



4X_Pro
Основатель проекта
Всего сообщений: 401
Зарегистрирован: 22 сент. 2014 г., 18:56
Откуда: Москва, Перово
Рейтинг пользователя: 15

0
#6
Разобрался. Нужно в шаблонах раздела и темы (файлы template/def/stdforum/view_topic.tpl и template/def/stdforum/view_forum.tpl) добавить проверку на то, что списки модераторов и экспертов не пусты:
{% if roles.moderator|length>0 %}
меняем на
{% if roles.moderator and roles.moderator|length>0 %}
И то же самое с экспертами:
{% if roles.expert|length>0 %}
на
{% if roles.expert and roles.expert|length>0 %}
Файлы прикладываю.
Прикрепленные файлы:

Критикуя — предлагай, предлагая — обосновывай!
4xpro.ru — мой личный сайт-мультиблог на Intellect Board.

damisejker
Новичок
Всего сообщений: 21
Зарегистрирован: 24 июл. 2020 г., 19:04
Откуда: Варшава
Рейтинг пользователя: 0

0
#7
Загрузил поправленные файлы. Исчезла одна одна линия с ошибкой.  В любой теме с сообщениями показывает ту же ошибку:


0: count(): Parameter must be an array or an object that implements Countable (строка 1234, /home/magismo/forums.magismo.ru/opt/Twig/Extension/Core.php, ошибка: 2)<ul style="font-size: 0.9em; color: #600"></ul>


damisejker
Новичок
Всего сообщений: 21
Зарегистрирован: 24 июл. 2020 г., 19:04
Откуда: Варшава
Рейтинг пользователя: 0

0
. Редактировалось 4 раза, последний — #8
Удалось бы разрешить вопрос в файле opt/Twig/Extension/Core.php.

Заменив:
function twig_length_filter(Twig_Environment $env, $thing)     {         return is_scalar($thing) ? mb_strlen($thing, $env->getCharset()) : count($thing);     }

На:
function twig_length_filter(Twig_Environment $env, $thing) { return is_scalar($thing) ? mb_strlen($thing, $env->getCharset()) : ($thing instanceof Countable ? count($thing):0); }

Ошибки-то исчезают. Но вместе с этим исчезают верхние ссылки тем, показывающие локацию, например:
Intellect Board » Техническая поддержка версии 3.02 » Ошибки форума в версии PHP 7.3


И статистика побывавших за последние сутки рушится.. показывало только кто сейчас на форуме, а во всей статистике нули стояли.

damisejker
Новичок
Всего сообщений: 21
Зарегистрирован: 24 июл. 2020 г., 19:04
Откуда: Варшава
Рейтинг пользователя: 0

0
#9
Вроде бы проблема не проявляется если заменить:
function twig_length_filter(Twig_Environment $env, $thing) { return is_scalar($thing) ? mb_strlen($thing, $env->getCharset()) : count($thing); }

На:
function twig_length_filter(Twig_Environment $env, $thing) { if (null === $thing) { return 0; } if (is_scalar($thing)) { return mb_strlen($thing, $env->getCharset()); } if (is_object($thing) && method_exists($thing, '__toString') && !$thing instanceof \Countable) { return mb_strlen((string) $thing, $env->getCharset()); } if ($thing instanceof \Countable || is_array($thing)) { return count($thing); } return 1; }

В таком случае исчезает сама ошибка, и остальные функции как локация или присутствовавшие не повреждена. Хотелось бы узнать ваше мнение в глобальном смысле как этот может повлиять на функцию форума?

4X_Pro
Основатель проекта
Всего сообщений: 401
Зарегистрирован: 22 сент. 2014 г., 18:56
Откуда: Москва, Перово
Рейтинг пользователя: 15

0
. Редактировалось 1 раз, последний — #10
Я бы
if (null === $thing) {
заменил на
if (empty($thing)) {
, а is_scalar — на is_string. В IntB иногда используется значение false вместо пустого массива (и именно такие ситуации обычно и порождают указанную ошибку или же ситуации, когда массив просто не определён). Но вообще, менять что-то в Twig — это немного костыльно. Лучше всё-таки выявить источники ошибок в шаблонах. Единственная проблема — в этих случаях сложно узнать, где искать. Приходится открывать файл скомпилированного шаблона (они лежат в tmp/template/случайный_набор_цифр) и смотреть код в нём (хорошо хоть в отладочном режиме номера строк пишутся).
Нашёл ещё один источник сообщения об ошибке — проверка наличия уже прикреплённых файлов в форме для отправки сообщения (template/def/stdforum/postform.tpl):
{% if editpost.post.attach|length>0 %}
Нужно заменить на
{% if editpost.post.attach and editpost.post.attach|length>0 %}
Прикрепленные файлы:

Критикуя — предлагай, предлагая — обосновывай!
4xpro.ru — мой личный сайт-мультиблог на Intellect Board.

Следующие сообщения >>>
Страницы:
  • 1
  • 2
Распечатать

У вас нет прав для отправки сообщений в эту тему.