Ошибки форума в версии PHP 7.3 / 7.4
Страницы:
Распечатать
- 1
- 2
. Редактировалось 2 раза, последний — #1
Добрый день,
Активировали на сайте версию PHP 7,3 в связи с миграцией старых скриптов на новейшие.
На главной форума появились ошибки:
При попытке залогиниться наряду с сообщением о успешном входе выскакивает ещё ошибка:
В любой теме форума видим такие ошибки:
Не могли бы Вы помочь разрешить эти баги?
Активировали на сайте версию PHP 7,3 в связи с миграцией старых скриптов на новейшие.
На главной форума появились ошибки:
При попытке залогиниться наряду с сообщением о успешном входе выскакивает ещё ошибка:
В любой теме форума видим такие ошибки:
Не могли бы Вы помочь разрешить эти баги?
Первая ошибка — из-за того, что для подсчёта скрытых пользователей не создаётся пустой массив, а новые версии 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()));
Файл прикладываю.
Прикрепленные файлы:
- online.php (4138 байтов)
Критикуя — предлагай, предлагая — обосновывай!
4xpro.ru — мой личный сайт-мультиблог на Intellect Board.
Вторая ошибка: в файле 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;
}
Прикрепленные файлы:
- app.php (111 Кб)
Критикуя — предлагай, предлагая — обосновывай!
4xpro.ru — мой личный сайт-мультиблог на Intellect Board.
Исправление для третьей ошибки — файл lib/bbcode.php.
Прикрепленные файлы:
- bbcode.php (28 Кб)
Критикуя — предлагай, предлагая — обосновывай!
4xpro.ru — мой личный сайт-мультиблог на Intellect Board.
4X_Pro, спасибо за оказанную помощь. Получилось разрешить проблему с ошибками на главной форума и в логине. После замены третьего файла, количество ошибок уменьшилось, но не исчезло..
Разобрался. Нужно в шаблонах раздела и темы (файлы 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 %}
Файлы прикладываю.
Прикрепленные файлы:
- view_forum.tpl (8017 байтов)
- view_topic.tpl (6584 байта)
Критикуя — предлагай, предлагая — обосновывай!
4xpro.ru — мой личный сайт-мультиблог на Intellect Board.
Загрузил поправленные файлы. Исчезла одна одна линия с ошибкой. В любой теме с сообщениями показывает ту же ошибку:
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>
. Редактировалось 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
И статистика побывавших за последние сутки рушится.. показывало только кто сейчас на форуме, а во всей статистике нули стояли.
Вроде бы проблема не проявляется если заменить:
На:
В таком случае исчезает сама ошибка, и остальные функции как локация или присутствовавшие не повреждена. Хотелось бы узнать ваше мнение в глобальном смысле как этот может повлиять на функцию форума?
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;
}
В таком случае исчезает сама ошибка, и остальные функции как локация или присутствовавшие не повреждена. Хотелось бы узнать ваше мнение в глобальном смысле как этот может повлиять на функцию форума?
. Редактировалось 1 раз, последний — #10
Я бы
заменил на
, а is_scalar — на is_string. В IntB иногда используется значение false вместо пустого массива (и именно такие ситуации обычно и порождают указанную ошибку или же ситуации, когда массив просто не определён). Но вообще, менять что-то в Twig — это немного костыльно. Лучше всё-таки выявить источники ошибок в шаблонах. Единственная проблема — в этих случаях сложно узнать, где искать. Приходится открывать файл скомпилированного шаблона (они лежат в tmp/template/случайный_набор_цифр) и смотреть код в нём (хорошо хоть в отладочном режиме номера строк пишутся).
Нашёл ещё один источник сообщения об ошибке — проверка наличия уже прикреплённых файлов в форме для отправки сообщения (template/def/stdforum/postform.tpl):
Нужно заменить на
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 %}
Прикрепленные файлы:
- postform.tpl (8694 байта)
Критикуя — предлагай, предлагая — обосновывай!
4xpro.ru — мой личный сайт-мультиблог на Intellect Board.
Страницы:
Распечатать - 1
- 2
У вас нет прав для отправки сообщений в эту тему.