
Вышел 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!
Статья скопирована для себя, на авторство не претендую. ссылка