[spoiler]
И вот в обновлении ядра 14.5.2 добавлена полная поддержка mysqli. Включать mysqli нужно отдельно для старого и нового ядра:
\bitrix\php_interface\dbconn.php
define("BX_USE_MYSQLI", true); |
'connections' => array ( 'value' => array ( 'default' => array ( 'className' => '\\Bitrix\\Main\\DB\\MysqliConnection', 'host' => 'localhost', 'database' => 'sitemanager', 'login' => 'root', 'password' => '*****', ), ), ), |
Внимание, в php должно быть установлено расширение mysqli, дополнительные проверки на наличие расширения не производятся! Так же как они не делались для mysql.
Кроме того, в этом обновлении улучшилась совместимость с php 5.5 (исправлены регулярные выражения с модификатором "e").
P.S. Интересуют как новые версии, так и текущие установки (обновляемые).
Хотите сказать, что каждый владелец магазина должен разбираться в тонкостях?
Перехода на mysqli кроме разработчиков все-равно никто не заметит, а они вполне квалифицированы чтобы и решение принять и подключить все как нужно.
Это блог для разработчиков и фишку добавили для разработчиков.
Разработчик и сам знает нужен ли проекту mysqli и обоснует заказчику, если это действительно нужно. Можно даже заказчику не сообщать о таких тонкостях, они обычно даже и не особо хотят о таком знать и думать, есть задачи и поважнее.
Уже не раз столкнулся, что на хостинге стоит только mysqli, приходилось отдельно настраивать php. Теперь проблем меньше будет при установке Битрикса, что тоже радует.
Когда владелец проекта решит, что ему нужны какие то доработки от своего программиста, он уже будет решать нужен ли ему mysqli, полезет ли он прямыми запросами к БД. А сейчас речь не идет о коде разработчика заказчика.
Неудобно, конечно, что теперь это нужно делать в двух местах, хорошо бы ядро брало настройки из dbconn.php и перезаписывало их из .settings.php при необходимости.
Нужны ли с новым расширением параметры options => 2 и readonly => true ?
Api Битрикса почему-то думало что у нас свойства всегда хранятся отдельно, искало инфоблок и не находило его, выдавая ошибку.
MySQL Query Error: SEL ECT * FR OM `b_iblock_element_prop_s3` LIMIT 0[[1146] Table 'b_iblock_element_prop_s3' doesn't exist]
Это действительно ошибка или может при переходе на mysqli планируете сразу инфоблоки2.0 сделать по-умолчанию?
Я завел лишь речь о том, чтобы делать это автоматически.
или в файл mysqli.ini добавить
и перезагрузить apache. имеет смысл в новых версиях окружения mysqli иметь по умолчанию включенным, ведь новая версия окружения уже предлагает установить php 5.6.
/home/bitrix/www/bitrix/modules/main/lib/db/mysqlconnection.php:45
#0: mysql_connect(string, string, string, boolean)
/home/bitrix/www/bitrix/modules/main/lib/db/mysqlconnection.php:45
#1: Bitrix\Main\DB\MysqlConnection->connectInternal()
/home/bitrix/www/bitrix/modules/main/lib/db/mysqlconnection.php:103
#2: Bitrix\Main\DB\MysqlConnection->queryInternal(string, array, NULL)
/home/bitrix/www/bitrix/modules/main/lib/db/connection.php:329
#3: Bitrix\Main\DB\Connection->query(string)
/home/bitrix/www/bitrix/modules/main/lib/config/option.php:183
#4: Bitrix\Main\Config\Option::load(string, NULL)
/home/bitrix/www/bitrix/modules/main/lib/config/option.php:53
#5: Bitrix\Main\Config\Option::get(string, string, string)
/home/bitrix/www/bitrix/modules/main/lib/httprequest.php:337
#6: Bitrix\Main\HttpRequest->prepareCookie(array)
/home/bitrix/www/bitrix/modules/main/lib/httprequest.php:63
#7: Bitrix\Main\HttpRequest->__construct(object, array, array, array, array)
/home/bitrix/www/bitrix/modules/main/lib/httpapplication.php:43
#8: Bitrix\Main\HttpApplication->initializeContext(array)
/home/bitrix/www/bitrix/modules/main/lib/application.php:122
#9: Bitrix\Main\Application->initializeExtendedKernel(array)
/home/bitrix/www/bitrix/modules/main/include.php:24
#10: require_once(string)
/home/bitrix/www/bitrix/modules/main/include/prolog_before.php:14
#11: require_once(string)
/home/bitrix/www/bitrix/modules/main/include/prolog.php:10
#12: require_once(string)
/home/bitrix/www/bitrix/header.php:1
#13: require(string)
/home/bitrix/www/index.php:2
Трассировка Execption-ов говорит, что да попытка использования mysqli в коде просматривается.
Но по какой-то причине не воспринимается параметр options.
Ошибка появилась после восстановления резервной копии на CentOS7.2
Restore.php отрабатывает без единого писка, затирает времянки - и при первом запуске выдает танго со скрина выше. Один в один.
Попытка уйти на MySQLi результата не дала, при замене параметров в .settings.php и dbconn.php, танго сменяется вальсом:
папка mysqli отсуствует в ядре еще. не дописали. пробовал скопировать с содержимого рядом mysql , тогда начинает сыпать ошибками ненайденных классов хотя сайт начинает хоть как-то запускаться через раз
Манипуляции:
Файл: dbconn.php
Добавлено: define("BX_USE_MYSQLI", true);
Файл: .settings.php
Исправлено: 'className' => '\\Bitrix\\Main\\DB\\MysqlConnection', на 'className' => '\\Bitrix\\Main\\DB\\MysqliConnection',
(если сайт в однобайтовой кодировке)
Файл: bitrixenv.ini
Исправлено:
mbstring.func_overload = 2
mbstring.internal_encoding = UTF-8
на:
mbstring.func_overload = 0
mbstring.internal_encoding = ISO-8859-1
reboot
[ErrorException] E_DEPRECATED Non-static method CAllLanguage::GetList() should not be called statically, assuming $this from incompatible context (0)
/var/www/u0572725/data/www/xn--1-7sbf7bf8h.xn--p1ai/bitrix/modules/main/classes/mysql/main.php:46
#0: CMain->GetLang() /var/www/u0572725/data/www/xn--1-7sbf7bf8h.xn--p1ai/bitrix/modules/main/include.php:1
#1: require_once(string) /var/www/u0572725/data/www/xn--1-7sbf7bf8h.xn--p1ai/bitrix/modules/main/include/prolog_admin_before.php:18
#2: require_once(string) /var/www/u0572725/data/www/xn--1-7sbf7bf8h.xn--p1ai/bitrix/modules/main/interface/desktop.php:2
#3: require(string) /var/www/u0572725/data/www/xn--1-7sbf7bf8h.xn--p1ai/bitrix/admin/index.php:2
поменял на mysqli в .settings.php и dbconn.php
логины и пароли в файлах одинаковые.
до замены на mysqli
после замены на mysqli сайт стал не доступен.
т.е. в хроме пишет Не удается получить доступ к сайту
всё что здесь написали, всё перепробовал. ничего не помогло.
помогите
0. бэкап сделали полный
1. на centos 7 установили BV 7.3.4
2. зашли на портал, создали новый сайт
3. через админку восстановили копию
развернули на самом последнем (BV 7.3.4, php 7.1.26, mysql 5.7)
при окончании бэкапа система запросила учетные данные скуля. мы дамп базы не делали, он вроде как с порталом делается.
выбрал создание новой БД (sitemanager) с использованием логина и пароля по дефолту (bitrix0). пароль после поменял на простой.
PS. учетные данные БД от старого портала не подходили.
PSS. в хроме пишет ERR_CONNECTION_REFUSED
через файл restore.php указав файлы архивов.
перенесли БД (копированием) на новый сервер.
восстановление проходила с ошибками. по мере выполнения восстановление их устраняли.\
и всё равно ошибка при заходе на портал
если менять на mysqli, то вообще не заходит на портал.
и я словил эту проблему!
Просто утром сайт перестал работать, не могу войти в админку.
решение есть?
#php_admin_value mbstring.internal_encoding UTF-8
#php_admin_value mbstring.func_overload 2
и все заработало.
Too few arguments to function CallMain::SetTitle(), 0 passed in /home/..../catalog.index.php on line 5 and at least 1 expected (0)
/home/.../bitrix/modules/main/classes/general/main.php:434
#0: CallMain->SetTitle()
/home/..../catalog/index.php:5
#1: include_once(string)
/home/.../bitrix/modules/main/include/urlrewrite.php:159
#2: include_once(string)
/home/.../bitrix/urlrewrite.php:2
[Error] Call to undefined function Bitrix\Main\Text\mb_strtolower() (0) /home/bitrix/www/bitrix/modules/main/lib/text/binarystring.php:144 #0: Bitrix\Main\Text\BinaryString::changeCaseToLower(string) /home/bitrix/www/bitrix/modules/main/lib/page/asset.php:873 #1: Bitrix\Main\Page\Asset->getScriptAreas(string) /home/bitrix/www/bitrix/modules/main/lib/page/asset.php:829 #2: Bitrix\Main\Page\Asset->moveJsToBody(string) /home/bitrix/www/bitrix/modules/main/classes/general/main.php:3261 #3: CAllMain->EndBufferContent(string) /home/bitrix/www/bitrix/modules/main/classes/general/main.php:3201 #4: CAllMain->EndBufferContentMan() /home/bitrix/www/bitrix/modules/main/include/epilog_after.php:36 #5: require(string) /home/bitrix/www/bitrix/modules/main/include/epilog.php:3 #6: require_once(string) /home/bitrix/www/bitrix/footer.php:4 #7: require(string) /home/bitrix/www/index.php:487
Call to undefined function mysql_connect() (0)
/home/bitrix/www/bitrix/modules/security/classes/mysql/database.php:24
#0: CSecurityDB::Init(boolean)
/home/bitrix/www/bitrix/modules/security/classes/mysql/database.php:103
#1: CSecurityDB::Query(string, string)
/home/bitrix/www/bitrix/modules/security/classes/general/antivirus.php:441
#2: CSecurityAntiVirus->dolog()
/home/bitrix/www/bitrix/modules/security/classes/general/antivirus.php:600
#3: CSecurityAntiVirus->Analyze(string)
/home/bitrix/www/bitrix/modules/security/classes/general/antivirus.php:197
Ошибка появилась и локально и на сервере. Проверил, все настройки как в мануле (в т.ч. буква "i" в mysqli там, где надо, не пропущена). И так работало давно на php7. А потом сломалось. Временно удалось вылечить, отключив в админке Веб-антивирус. Но почему он пытается подключиться через mysql - непонятно.
Подскажите, пожалуйста, обновляем 9-ку до текущей версии и при выставлении PHP 7.4 сайт выдает белый экран.
В \bitrix\php_interface\dbconn.php прописали