File bitrix modules security classes general antivirus php

Новое ядро и расширение mysqli

Как известно, используемое в продукте расширение mysql объявлено устаревшим в PHP 5.5.0. Поэтому в новом ядре было сразу предусмотрено использование актуального расширения mysqli. Но в одном из этапов разработки мы решили совместить старое и новое ядро в один жизненный цикл. Так как старое ядро не умело работать с mysqli, то и в новом его не получалось использовать.

Показать скрытое содержимое

И вот в обновлении ядра 14.5.2 добавлена полная поддержка mysqli. Включать mysqli нужно отдельно для старого и нового ядра:

'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»).

По дефолту поддержка расширения mysqli будет включаться в продукте? Если да, то когда?
P.S. Интересуют как новые версии, так и текущие установки (обновляемые).

Заготовка в инсталлере для новых установок уже есть. Хотим сначала убедиться, что все работает. Текущие версии — никогда, владелец проекта сам должен решить, что ему подходит лучше.

«Нет, Александр, так ты слона не продашь!»

Хотите сказать, что каждый владелец магазина должен разбираться в тонкостях?

Для тонкостей есть специалисты, которые без труда при необходимости все настроят.
Перехода на mysqli кроме разработчиков все-равно никто не заметит, а они вполне квалифицированы чтобы и решение принять и подключить все как нужно.

:)

Андрей, а мне и не нужно никому продавать эту фишку
Это блог для разработчиков и фишку добавили для разработчиков.
Разработчик и сам знает нужен ли проекту mysqli и обоснует заказчику, если это действительно нужно. Можно даже заказчику не сообщать о таких тонкостях, они обычно даже и не особо хотят о таком знать и думать, есть задачи и поважнее.
Уже не раз столкнулся, что на хостинге стоит только mysqli, приходилось отдельно настраивать php. Теперь проблем меньше будет при установке Битрикса, что тоже радует.

Читайте также:  Ноутбуки для программирования java

Причем тут владелец проекта? Сейчас речь идет о коде 1С-Битрикс, вопрос к разработчикам Битрикс, даст ли это какой то плюс к их коду. Битрикс вообще не рекомендует напрямую обращаться к БД.

Когда владелец проекта решит, что ему нужны какие то доработки от своего программиста, он уже будет решать нужен ли ему mysqli, полезет ли он прямыми запросами к БД. А сейчас речь не идет о коде разработчика заказчика.

Пока преимуществ не наблюдается. Возможно, в будущем появится параметризация запросов, еще что-нибудь. Здесь больше внешний фактор роль играет: однажды php запретит старое расширение, нам нужно быть к этому готовыми.

Заметили такую ошибку ( причем уже как месяца 3 назад ): при переносе некоторых проектов,при загрузке сайт показывает белую страницу, ровно до тех пор, как мы в .settings не пропишем актуальные данные о подключении. Естественно, переменную в true никто не переводил. Как такое могло произойти?

Реквизиты от базы нужно прописывать в любом случае, при любом драйвере.
Неудобно, конечно, что теперь это нужно делать в двух местах, хорошо бы ядро брало настройки из dbconn.php и перезаписывало их из .settings.php при необходимости.

В старом расширении было так

'connections' => array ( 'value' => array ( 'default' => array ( 'className' => '\\Bitrix\\Main\\DB\\MysqlConnection', 'host' => 'localhost', 'database' => 'db', 'login' ='login', 'password' => '****', 'options' => 2, ), ), 'readonly' => true, ),

readonly — это атрибут любой опции (не только соединения), который говорит, что из API нельзя значение менять.

$this->dbOptions = intval($configuration['options']); if ($this->dbOptions < 0) $this->dbOptions = self::PERSISTENT | self::DEFERRED;

‘options’ => 2 говорит о том, что соединение персистентное и отложенное. И да, эти же параметры используются для MysqliConnection.

:)

Вадим, при переходе на mysqli у нас в некоторых скриптах возникала ошибка при использовании CIBlockElement::SetPropertyValuesEx.
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 сделать по-умолчанию?

Читайте также:  Навигация пример кода html

Вадим, может стоит этот фикс еще в restore.php добавить? А то не понимал почему не заводится бекап, вроде копия свежая. Этот пост как-то забыл.

:)

Антон, давай подробности, не понимаю, о чем разговор.

Вадим, тикет 623830. Суть в том, что распаковал бекап на более свежем PHP, и выдалась фатальная ошибка PHP. Техподдержка что-то поправила (по сути вставила константу) — и все завелось. Вот и предлагаю научить restore.php самому подставлять необходимую константу при надобности.

В тикете ТП сделала описанные действия в этом посте.
Я завел лишь речь о том, чтобы делать это автоматически.

Имхо было бы неплохо mysqli автоматически включать в новых версиях окружения 5.1.3+. Сейчас для этого нужно в /etc/php.d найти mysqli.ini.disabled и переименовать например в mysqli.ini
или в файл mysqli.ini добавить

; Enable mysqli extension module extension=mysqli.so

:|

и перезагрузить apache. имеет смысл в новых версиях окружения mysqli иметь по умолчанию включенным, ведь новая версия окружения уже предлагает установить php 5.6.

[ErrorException] E_DEPRECATEDmysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead (0)
/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

У меня такая же проблема ловлю Exception хотя всё настраивал по мануалу.
Трассировка Execption-ов говорит, что да попытка использования mysqli в коде просматривается.
Но по какой-то причине не воспринимается параметр options.

[Error] Call to undefined function Bitrix\Main\DB\mysql_connect() (0) /home/bitrix/www/bitrix/modules/main/lib/db/mysqlconnection.php:45 #0: Bitrix\Main\DB\MysqlConnection->connectInternal() /home/bitrix/www/bitrix/modules/main/lib/db/mysqlconnection.php:103 #1: Bitrix\Main\DB\MysqlConnection->queryInternal(string, array, NULL) /home/bitrix/www/bitrix/modules/main/lib/db/connection.php:329 #2: Bitrix\Main\DB\Connection->query(string) /home/bitrix/www/bitrix/modules/main/lib/config/option.php:182 #3: Bitrix\Main\Config\Option::load(string, NULL) /home/bitrix/www/bitrix/modules/main/lib/config/option.php:53 #4: Bitrix\Main\Config\Option::get(string, string, string) /home/bitrix/www/bitrix/modules/main/lib/httprequest.php:337 #5: Bitrix\Main\HttpRequest->prepareCookie(array) /home/bitrix/www/bitrix/modules/main/lib/httprequest.php:63 #6: Bitrix\Main\HttpRequest->__construct(object, array, array, array, array) /home/bitrix/www/bitrix/modules/main/lib/httpapplication.php:42 #7: Bitrix\Main\HttpApplication->initializeContext(array) /home/bitrix/www/bitrix/modules/main/lib/application.php:122 #8: Bitrix\Main\Application->initializeExtendedKernel(array) /home/bitrix/www/bitrix/modules/main/include.php:23 #9: require_once(string) /home/bitrix/www/bitrix/modules/main/include/prolog_before.php:14 #10: require_once(string) /home/bitrix/www/bitrix/modules/main/include/prolog.php:10 #11: require_once(string) /home/bitrix/www/bitrix/header.php:1 #12: require(string) /home/bitrix/www/index.php:2

Источник

Читайте также:  Installing python ldap ubuntu

Модуль проактивной защиты отключить как?

Добрый день подскажите пожалуйста включил содуль проактивной защиты в админ панеле как его отключить?немогу войти в админ панель и на сайт ошибка Fatal error: Call to undefined function mb_strlen() in /home/berendeevo/berendeevo.ru/docs/bitrix/modules/security/classes/general/antivirus.php on line 488
Подскажите подробнее как его отключить есть доступ только к ФТП в админ панеле пишет такую же ошибку.

вам нужен доступ в базу данных, например, через MySQL. Если его нет, то можете написать простенький скриптик, выполняющий подключение к БД и 1 простой запрос: DELETE FR OM b_module WH ERE `ID`=’security’ .

способ, предложенный Алексанжром, не помог — решить смог так:
закомментил в файле bitrix/modules/main/include.php 316-317 строчки, зашел в админке в проактивную защиту, добавил свой айпи, раскомментил строчки

надеюсь кому-нибудь пригодится

Закомментировал эти строчки:

foreach (GetModuleEvents("main", "OnPageStart", true) as $arEvent) ExecuteModuleEventEx($arEvent);

Закомментировал эти строчки:

foreach (GetModuleEvents( "main" , "OnPageStart" , true ) as $arEvent ) ExecuteModuleEventEx( $arEvent );
Цитата
написал:
Закомментировал эти строчки:Кодforeach (GetModuleEvents(«main», «OnPageStart», true) as $arEvent)
ExecuteModuleEventEx($arEvent);

Спасибо! Мне также это помогло при решении проблемы с ограничением по хостам/доменам в проактивной защите.

Данный код в текущей версии ядра Битрикс находился уже на других строках.Ориентироваться нужно при поиске на событие OnPageStart

В настройках проактивной защиты пришлось указать localhost, хотя обращение к сайту идёт по тестовому домену. Без этого настройки не сохраняются, появляется сообщение

Хотя в переменных $_SERVER всё ОК
$_SERVER[HTTP_HOST]=>тестовый домен
$_SERVER[SERVER_ADDR] => 127.0.0.1

Продукты

Управление сайтом

Битрикс24

Интернет-магазин + CRM

Решения

Для интернет-магазинов

Каталог готовых решений

Внедрение

Выбрать партнера

Проверить партнера

Стать партнером

1С-Битрикс http://www.1c-bitrix.ru Общие вопросы info@1c-bitrix.ru Приобретение и лицензирование продуктов : sales@1c-bitrix.ru Маркетинг/мероприятия/PR marketing@1c-bitrix.ru Партнерская программа partners@1c-bitrix.ru Мы работаем с 10:00 до 19:00 по московскому времени. Офис в Москве 127287 Россия Московская область Москва 2-я Хуторская улица дом 38А строение 9 Офис в Калининграде +7 (4012) 51-05-64 Офис в Калининграде 236001 Россия Калининградская область Калининград Московский проспект 261 Офис в Киеве ukraine@1c-bitrix.ru Телефон в Киеве +3 (8044)221-55-33 Офис в Киеве 01033 Украина Калининградская область Киев улица Шота Руставели 39/41 офис 1507

Контент для лиц от 16 лет и старше

© 2001-2023 «Битрикс», «1С-Битрикс». Работает на 1С-Битрикс: Управление сайтом. Политика конфиденциальности

Источник

Оцените статью