Коснулся 1C Bitrix CMS...
Возникла сложность с развертыванием бэкапа сайта (вместе с базой) работающего под php 8.0 на свежем - 8.2 версии.
Warning: Undefined array key "d_pos" in /http/site/restore.php on line 792
Warning: Undefined array key "LocalCloud" in /http/site/restore.php on line 797
Fatal error: Uncaught mysqli_sql_exception: Unknown database 'site_sm' in /http/site/restore.php:1663 Stack trace:
#0 /http/site/restore.php(1663): mysqli_select_db()
#1 /http/site/restore.php(799): CDBRestore->Connect()
#2 {main} thrown in /http/site/restore.php on line 1663
Если верить официальному заявлению компании разработчика, то требуется php минимум 7.4.
Кхм! как-же так? а всё довольно просто если взглянуть на этот "волшебный" код.
Скачиваемый (18.05.2023) с официального сервера компании разработчика скрипт "восстановления" restore.php содержит ошибку (и даже не одну а много). Взглянем ровно на те строчки о которых нам говорит стектрейс.
Мы обнаруживаем применение функции mysql_select_db либо mysqli_select_db
открываем официальную документацию на php.net и видим сноску красным
Внимание
Данный модуль устарел, начиная с версии PHP 5.5.0, и удалён в PHP 7.0.0. Используйте вместо него MySQLi или PDO_MySQL.
Хороший тон прочитать: что в новой версии меняется и что отваливается совсем, дабы сделать необходимые code-changes. А еще лучший тон: взять и организовать внутреннее тестирование. Иже Unit-tests.
Идем далее и читаем документацию по следующей, более новой функции (которую РЕКОМЕНДУЮТ пользовать).
Т.е. она может выкидывать исключения (что у нас и происходит! либо возвращать булево значение (что ожидает этот код). Ок, открываем документацию на следующую функцию задающую режим обработки ошибок БД.
т.е. начиная с 8.1 версии php дефолтовое значение было изменено. Поиск строк текста содержащих эти константы по restore.php не возвращает нам задание режима работы. Просто пусто!
Рецепт починки прост - дописать в функцию Connect кода restore.php всего 1 строчку.
судя по оставшемуся коду далее в этом файле - она везде расчитывает на булев возврат из функций mysql* а не работу с исключениями.
Такое вот оно :(
There are no published comments.
New comment