Форум OlegON > Ресурсы OlegON > Вопросы сервера

Как перевести Vbulletin 3 на PHP8 : Вопросы сервера

29.03.2024 16:26


22.11.2021 20:23
OlegON
 
Адово количество работы привалило из-за причуд работы разработчиков PHP. К сожалению, не записывал заранее, что приходилось править.

С самого начала пришлось поправить несколько php файлов на предмет записи some[index], переписав в some['index'], ругалось
PHP message: PHP Fatal error: Uncaught Error: Undefined constant
Крайне не рекомендую сразу переходить на PHP8, лучше поднять копию форума на виртуалке, после чего править сначала на виртуалке, потом на основной ноде и потом переливать все на виртуалку опять. Сильно споткнулся на том, что многие такие записи были в модулях и темплейтах. В темплейтах надо выискивать condition, то есть условия, где есть записи вида some[index]. Везде править индексы не надо! С продуктами такая же засада, а поскольку править их сподручно только через веб-морду, то лучше на старом форуме все поправить, до перехода на PHP8.

Не очень понял причину, но в админке index.php строки с Data_length и Index_length, где менялись -1 на n/a, на этот n/a и стали менять, в результате чего падала процедура форматирования числа. Выкинул. Гораздо проще смотреть на -1.

В PHP8 объявлен XMLParser, соответственно, из class_xml его лучше выкинуть. Я сначала долго думал, как его перенаследовать, чтобы не ругалось, потом просто выкинул и оно работает. Более, чем странно :)

Потом очень много аналогичного пришлось поправить после ругани
PHP message: PHP Fatal error: Uncaught Error: Non-static method vBulletinHook::fetch_hook() cannot be called statically in
везде
Код:
$hook = vBulletinHook::fetch_hook
надо поменять на
Код:
$hook=(new vBulletinHook())->fetch_hook
просто жесть, я не рискнул глобально все поменять, потому вручную (заменой, конечно) поменял в нескольких десятках мест...
22.11.2021 22:03
OlegON
 
в index.php админки в самом начале есть строки проверки версии
Код:
if ($mysqlversion['version'] >= '3.23')
их надо убрать, если хотите видеть реальный размер таблиц вместо -1
28.01.2022 16:33
OlegON
 
Несколько строк $items = sizeof(...) + sizeof(...) просто выкинул, эта переменная больше нигде не использовалась, зато ругалось на то, что в sizeof передается null.
В админпанельке загрузка определялась по uptime и неправильно, выкинул из условия, чтобы определялось только по /proc/loadavg
Просто тонны ошибок вроде
PHP Fatal error: Uncaught Error: Undefined constant "threadid"
и особенно много их в модулях и темплейтах. Обратите внимание, что в темплейтах, бывает, вкладываются другие темплейты, причем, ругается только на основной, найти строку с ошибкой очень тяжело. То есть поправишь, потом опять экспорт в дамп, перекидываешь на виртуалку, убиваешь базу, импортишь, а там новая ошибка... Жесть...

Код:
$mail = vB_QueueMail::fetch_instance();
меняем на
Код:
$mail = (new vB_QueueMail($vbulletin))->fetch_instance();
в functions.php

Очень много несовпадающих переопределений функций в наследуемых от vb_datamanager классах. Часть выкинул, часть дописал в наследниках.

Много замены $postinfo[postid] на $postinfo['postid'] в functions_post_thanks.php

Много будет PHP message: PHP Deprecated: Required parameter $thanks follows optional parameter $forumid in
Приходилось либо выкидывать, либо добавлять нужные умолчания.

"Начиная с PHP 8 ошибка undefined variable перестанет относиться к E_NOTICE и так легко отключить её уже не удастся."
мать, мать, мать... привычно отозвалось эхо...



PHP Fatal error: Uncaught Error: Call to undefined function create_function() - create_function() была благополучно выпилена. Поменял.
Часовой пояс GMT +3, время: 16:26.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.