1С УПРАВЛЕНИЕ ТОРГОВЛЕЙ И ИНТЕРНЕТ-МАГАЗИН БИТРИКС

FAQ и советы Битрикс


Переход битрикс на php7

Вышел php7 и многие заявляют, что производительность 1С-Bitrix на этой версии php возросла.
Но если обновить php, то сайт перестанет работать.

Так же если вы развернули сайт несколько лет назад, ещё на Битрикс машине, например, CentOS-6-amd64-bitrix, то на большинстве хостингов уже нет возможности установить CentOS-6, есть только Битрикс машина CentOS-7. Но если развернуть бекап на свежей битрикс машине сайт снова не заработает.

Будет получен следующий набор ошибок при попытке открыть сайт:

[Error] 
Call to undefined function Bitrix\Main\DB\mysql_real_escape_string() (0)
/home/bitrix/www/bitrix/modules/main/lib/db/mysqlsqlhelper.php:21
#0: Bitrix\Main\DB\MysqlSqlHelper->forSql(string)
        /home/bitrix/www/bitrix/modules/main/lib/db/sqlexpression.php:111
#1: Bitrix\Main\DB\SqlExpression->execPlaceholders(array)
        
#2: preg_replace_callback(string, array, string)
        /home/bitrix/www/bitrix/modules/main/lib/db/sqlexpression.php:68
#3: Bitrix\Main\DB\SqlExpression->compile()
        /home/bitrix/www/bitrix/modules/main/classes/general/usertype.php:2913
#4: CAllSQLWhere->_ExprEQ(string, object)
        /home/bitrix/www/bitrix/modules/main/classes/general/usertype.php:3557
#5: CAllSQLWhere->addStringFilter(array, boolean, string, string, object)
        /home/bitrix/www/bitrix/modules/main/classes/general/usertype.php:3216
#6: CAllSQLWhere->GetQueryEx(array, array)
        /home/bitrix/www/bitrix/modules/main/classes/general/usertype.php:3101
#7: CAllSQLWhere->GetQuery(array)
        /home/bitrix/www/bitrix/modules/main/lib/entity/query.php:1119
#8: Bitrix\Main\Entity\Query->buildJoin()
        /home/bitrix/www/bitrix/modules/main/lib/entity/query.php:1297
#9: Bitrix\Main\Entity\Query->buildQuery()
        /home/bitrix/www/bitrix/modules/main/lib/entity/query.php:486
#10: Bitrix\Main\Entity\Query->exec()
        /home/bitrix/www/bitrix/modules/main/lib/entity/datamanager.php:256
#11: Bitrix\Main\Entity\DataManager::getList(array)
        /home/bitrix/www/bitrix/modules/highloadblock/admin/menu.php:14
#12: include(string)
        /home/bitrix/www/bitrix/modules/main/interface/admin_lib.php:640
#13: CAdminMenu->_IncludeMenu(string)
        /home/bitrix/www/bitrix/modules/main/interface/admin_lib.php:418
#14: CAdminMenu->Init(array)
        /home/bitrix/www/bitrix/modules/main/interface/prolog_main_admin.php:30
#15: require_once(string)
        /home/bitrix/www/bitrix/modules/main/include/prolog_admin_after.php:15
#16: require(string)
        /home/bitrix/www/bitrix/modules/main/admin/update_system.php:31
#17: require_once(string)
        /home/bitrix/www/bitrix/admin/update_system.php:2

или

[Error] 
Call to undefined function mysql_query() (0)
C:\OSPanel\www\ut11info\bitrix\modules\main\classes\mysql\database_mysql.php:47
#0: CDatabase->QueryInternal(string)
        C:\OSPanel\www\ut11info\bitrix\modules\main\classes\mysql\database.php:161
#1: CDatabaseMysql->Query(string, boolean, string)
        C:\OSPanel\www\ut11info\bitrix\modules\main\classes\mysql\main.php:96
#2: CMain->GetLang()
        C:\OSPanel\www\ut11info\bitrix\modules\main\include.php:48
#3: require_once(string)
        C:\OSPanel\www\ut11info\bitrix\modules\main\include\prolog_before.php:14
#4: require_once(string)
        C:\OSPanel\www\ut11info\bitrix\modules\main\include\prolog.php:10
#5: require_once(string)
        C:\OSPanel\www\ut11info\bitrix\header.php:1
#6: require(string)
        C:\OSPanel\www\ut11info\index.php:2


Все дело в том, что в php7 произошел переход на Mysqli. И чтобы заработал сайт, достаточно внести настройки в 2 файла движка Битрикс.

В файл  /bitrix/php_interface/dbconn.php
Добавить: define("BX_USE_MYSQLI", true);

И в файл: /bitrix/.settings.php
Исправить строку: 'className' => '\\Bitrix\\Main\\DB\\MysqlConnection', на 'className' => '\\Bitrix\\Main\\DB\\MysqliConnection',

И ваш сайт на Битрикс будет работать на php7!


Возврат к списку