Правильный перенос Bitrix с версии php 5.6 на 7.2




Правильный перенос Bitrix с версии php 5.6 на 7.2 это не только своевременное обновление файловой системы и движка, но и настройки в файлах. Для правильного переноса Bitrix нами будут использованы два файла с настройками. Как правило затруднение перехода на новую версию связано с использованием модуля подключения к базе данных.
Типичный лог ошибок может выглядеть так:
Версии подключения базы данных визуально похожи, однако используют разную логику соединения и соответственно разные библиотеки.
MYSQLI против MYSQL
Первый файл .settings.php находится в папке bitrix
Необходимо найти строчку либо ее дописать следующей директивой :
‘connections’ =>
array (
‘value’ =>
array (
‘default’ =>
array (
‘className’ => ‘\\Bitrix\\Main\\DB\\MysqliConnection’,
‘host’ => ‘localhost’,
Второй файл dbconn.php находится в папке /bitrix/php_interface/
в самом начале после открытия кода php прописываем :
Далее, на хостинге переключаем версию с php 5.6 на 7.2 и проверяем работу сайта.
Если что-то идет не так с первого раза верните все обратно и посмотрите лог ошибок.
Как установить логгирование ошибок в Битрикс?
В файле .settings.php дополняем или редактируем все, что относится к exception_handling
‘exception_handling’ => array (
‘value’ => array (
‘debug’ => false,
‘handled_errors_types’ => E_ALL &
E_USER_NOTICE,
‘exception_errors_types’ => E_ALL &
E_COMPILE_WARNING,
‘ignore_silence’ => false,
‘assertion_throws_exception’ => true,
‘assertion_error_type’ => 256,
‘log’ => array (
‘settings’ => array (
‘file’ => ‘bitrix/modules/error.log’,
‘log_size’ => 1000000,
),
),
),
‘readonly’ => false,
),
Теперь логи ошибок будут находится в папке bitrix/modules/error.log
Его точный анализ позволит вам определить источник ошибок и оперативно их исправить.
Крайне рекомендую перед каждым критическим изменением внутри движка делать резервные копии как в облако, так и на диск для быстрого разворачивания архивов.
И будет вам счастье.
Ошибки при переходе на PHP7
Стала выдаваться ошибка:
Fatal error: Uncaught Error: Call to undefined function mysql_connect() in /home/h910235323/tgliamz.ru/docs/bitrix/modules/main/classes/mysql/database.php:83 Stack trace: #0 /home/h910235323/tgliamz.ru/docs/bitrix/modules/main/classes/mysql/database.php(120): CDatabase->DoConnect() #1 /home/h910235323/tgliamz.ru/docs/bitrix/modules/main/classes/mysql/main.php(99): CDatabase->Query(‘SELECT L.*, L.L. ‘, false, ‘FILE: /home/h91. ‘) #2 /home/h910235323/tgliamz.ru/docs/bitrix/modules/main/include.php(1): CMain->GetLang() #3 /home/h910235323/tgliamz.ru/docs/bitrix/modules/main/include/prolog_before.php(14): require_once(‘/home/h91023532. ‘) #4 /home/h910235323/tgliamz.ru/docs/bitrix/modules/main/include/prolog.php(11): require_once(‘/home/h91023532. ‘) #5 /home/h910235323/tgliamz.ru/docs/bitrix/header.php(1): require_once(‘/home/h91023532. ‘) #6 /home/h910235323/tgliamz.ru/docs/index.php(1): require(‘/home/h91023532. ‘) #7
При переходе на PHP7.1
ошибка
[ErrorException] E_DEPRECATEDNon-static method CSiteCorporate::ShowPanel() should not be called statically (0)
/home/h910235323/meranorm.ru/docs/bitrix/modules/main/classes/general/module.php:490
#0: ExecuteModuleEventEx(array)
/home/h910235323/meranorm.ru/docs/bitrix/modules/main/include.php:568
#1: require_once(string)
/home/h910235323/meranorm.ru/docs/bitrix/modules/main/include/prolog_admin_before.php:18
#2: require_once(string)
/home/h910235323/meranorm.ru/docs/bitrix/modules/main/interface/desktop.php:2
#3: require(string)
/home/h910235323/meranorm.ru/docs/bitrix/admin/index.php:2
[ParseError] syntax error, unexpected ‘[‘, expecting ‘,’ or ‘;’ (0)
/home/a/apikcru/public_html/bitrix/components/alexkova.corporate/block.list/templates/.default/bitrix/news.list/.default/template.php:5
#0: CBitrixComponentTemplate->__IncludePHPTemplate(array, array, string)
/home/a/apikcru/public_html/bitrix/modules/main/classes/gene ral/component_template.php:820
#1: CBitrixComponentTemplate->IncludeTemplate(array)
/home/a/apikcru/public_html/bitrix/modules/main/classes/gene ral/component.php:745
#2: CBitrixComponent->showComponentTemplate()
/home/a/apikcru/public_html/bitrix/modules/main/classes/gene ral/component.php:693
#3: CBitrixComponent->includeComponentTemplate()
/home/a/apikcru/public_html/bitrix/components/bitrix/news.list/component.php:426
#4: include(string)
/home/a/apikcru/public_html/bitrix/modules/main/classes/gene ral/component.php:604
#5: CBitrixComponent->__includeComponent()
/home/a/apikcru/public_html/bitrix/modules/main/classes/gene ral/component.php:663
#6: CBitrixComponent->includeComponent(string, array, object)
/home/a/apikcru/public_html/bitrix/modules/main/classes/gene ral/main.php:1039
#7: CAllMain->IncludeComponent(string, string, array, object)
/home/a/apikcru/public_html/bitrix/components/alexkova.corporate/block.list/templates/.default/template.php:25
#8: include(string)
1С-Битрикс. Перевод на PHP 7
В этой заметке я расскажу о том, как перевести сайт на старой версии Битрикса на PHP 7.x и почему это важно для SEO.
Зачем вообще переходить на PHP 7
Скорость загрузки сайта является одним из важных факторов ранжирования. По результатам исследований сайты на PHP 7.x могут показывать прирост вплоть до 300% в скорости обработки запросов в сравнении с «классическим» PHP 5.6, используемым на многих хостингах в качестве версии PHP-интерпретатора по умолчанию.
Веб-разработчики со своей стороны могут как перечислить другие преимущества новых версий PHP, так и посетовать на проблемы совместимости, из-за которых при смене версии интерпретатора приходится переписывать часть кода, написанного с использованием устаревших функций.
Но в плане SEO нас больше интересует то, что при переводе сайта на новые версии PHP снижается время отклика сервера и повышается скорость обработки запросов, что в свою очередь приводит к повышению скорости загрузки страниц. А это, в свою очередь, влияет на ранжирование.
Тест производительности
Замер 1. Хостинг на HDD, PHP 5.6:
Эталонное состояние. Сайт работает на старом выделенном сервере, файлы физически находятся на HDD. Скорость загрузки страниц удовлетворительная, но хотелось бы большего.
Замер 2. Хостинг на SSD, PHP 5.6:
Сайт перенесен со старого сервера на виртуальный хостинг от Beget. Теперь файлы лежат на твердотельном накопителе. Версия PHP пока остается без изменений. Общая оценка производительности растет.
Замер 3. Хостинг на SSD, PHP 7.2:
Переключаем версию PHP-интерпретатора в настройках хостинга с 5.6 на 7.2. Общая оценка производительности растет еще больше.
* – на самом деле, этот тест не дает объективной информации о реальной производительности и может быть так, что сайт, набирающий 8 “условных единиц” в результатах работает намного быстрее сайта с 50 “условными единицами”. Но изменения оценки по одному и тому же сайту позволяют грубо прикинуть динамику после проведенных работ по технической оптимизации.
Перевод сайта на PHP 7
На момент написания этой статьи актуальные версии Битрикса официально совместимы с PHP 7.2 и именно эту версию я и рекомендую использовать. При желании можно использовать 7.3 и 7.4, однако в таком случае админка битрикса будет постоянно сигнализировать об ошибках в работе некоторых модулей.
После редактирования файлов снова проверяем работу сайта.
После перевода на PHP 7 сайт не работает. Возможные причины
Проблема: На сайте используются устаревшие модули или шаблоны
Решение 1: Обновить все модули из Маркетплейса
Решение 2: Самостоятельно или при помощи веб-разработчика найти в коде устаревшие и несовместимые с PHP 7 функции и переписать их
Проблема: Сайт работает, но встроенный тест постоянно выдает ошибки
Решение 1: Обновить Битрикс до актуальной версии
Решение 2: Игнорировать сообщения об ошибках, поскольку их появление обусловлено использованием несовместимого с некоторыми функциями PHP 7 модуля автотестирования в Битриксе 16 версии и старее.
1С-Битрикс и PHP 7: ускоряем сайт в 2 раза за 5 минут
Мы создаем крупные информационные веб-системы, глубоко интегрированные в бизнес Заказчика. Большинство наших проектов – комплексные, интеграционные.
Сегодня – перевод Битрикс-проектов на php7.
1 июля 2016 компания 1С-Битрикс анонсировала версию 16.5 платформы “Управление сайтом”, а вместе с ней поддержку PHP версии 7. Это прекрасная новость, так как PHP7 работает примерно в 2 раза быстрее. Теоретически. В статье проверяем скорость работы Битрикса на PHP7 на деле.
Переход рекомендован ВСЕМ! А в особенности тем, кого хостинг ругает за слишком высокую нагрузку на процессор.
Статья о том, как перевести на PHP 7 сайт, размещенный на хостинге TimeWeb. Для других хостингов процедура аналогичная. По итогам замеряем скорость.
Исходные данные
Моем руки
Переводим сайт на PHP 7
А теперь самое интересное
Снова смотрим на оценку производительности
Как видим, количество баллов производительности (в наших кругах “попугаев”) увеличилось в 2 раза. По информации от 1С-Битрикс увеличение может достигать 3-х раз и учитывая увиденное, этому можно верить.
Примечание №1 : препятствием к переходу на PHP7 могут стать модули из Marketplace.
Во-первых, в самом языке ужесточились правила написания кода. Например, в статических/нестатических методах и способах обращения к ним.
Во-вторых, после перевода на PHP7 нельзя будет установить из Marketplace демо-версии платных модулей, если по ним не было выпущено обновлений после 1 июля 2016. Это связано с изменением механизма защиты этих модулей.
Примечание №2 : обновление для виртуальной машины 1С-Битрикс ожидаем в сентябре. Если Ваш сайт развернут именно так, рекомендую подождать.
Подводя итог, могу сказать что получить такое ускорение сайта на битрикс за десятки минут это просто сказка. Матерые программисты подтвердят, что никакой рефакторинг кода никогда не даст такого прироста.
Всех желающих приглашаю оставить заявку на перевод своего сайта силами нашей техподдержки (быстро и с обязательным бекапом).
А для тех кто пропустил презентацию, вот то самое видео с рассказом о приросте скорости от Сергея Рыжикова
Ошибка при переходе с PHP5.5 на PHP 7.3.6
Здравствуйте!
По рекомендации битрикса сделал переход с PHP5.5 на PHP 7.3.6. Обнаружил одну проблему, выполнил полное обновление и она исчезла. Появилась снова через пару дней. Непонятно как такое может быть, откат на более младшие версии PHP теперь ничего не дает.
Хотелось понять что необходимо будет переписывать, возможно это то, что смогу сделать сам.
При сохранении элемента инфоблока «Товарный каталог» вижу
Cannot use string offset as an array (0)
#1: ExecuteModuleEventEx(array, array)
#2: CAllIBlockElement->CheckFields(array, integer, boolean)
#3: CIBlockElement->Update(integer, array, boolean, boolean, boolean)
//TODO: Возможно заменить на EventManager::getInstance()->getLastEvent();
if(isset($arEvent[«TO_METHOD_ARG»]) && is_array($arEvent[«TO_METHOD_ARG»]) && count($arEvent[«TO_METHOD_ARG»]))
$db_events = GetModuleEvents(«iblock», «OnBeforeIBlockElementAdd», true);
$db_events = GetModuleEvents(«iblock», «OnBeforeIBlockElementUpdate», true);
$bEventRes = ExecuteModuleEventEx($arEvent, array(&$arFields));
Ругается на то,что вы пытаетесь «Строковое значение» использовать в коде как «Массив».
Например сравнить как массив.
Вот тут:
/var/www/vhosts/svetozon.ru/httpdocs/bitrix/php_interface/init.php:1604
Покажите, что только в этой строке.
| Цитата |
|---|
| Ян Колосовский написал: Ругается на то,что вы пытаетесь «Строковое значение» использовать в коде как «Массив». Например сравнить как массив. Вот тут: /var/www/vhosts/svetozon.ru/httpdocs/bitrix/php_interface/init.php:1604 |
Покажите, что только в этой строке.
По большему счету у меня задача простая, сохранить элемент товарного каталога, после внесения изменений.
После перехода на PHP7 стало выдавать ошибку.
Включил вывод ошибок и разбираюсь.
К разработчику сайта обращаться страшно, накрутят для начала часов 8 по две тысячи за что то, в чем я вообще не разбираюсь.
| Цитата |
|---|
| Павел Шенвальд написал: сохранить элемент товарного каталога, после внесения изменений |
| Цитата |
|---|
| Павел Шенвальд написал: сохранить элемент товарного каталога, после внесения изменений |
Павел Шенвальд, хотите просто? Вот ответ:
3) В случае большого количества ошибок или невозможности исправить, рекомендую откатить версию php до предыдущей рабочей версии и (в случае если вы разработчик) постепенно переписывать проект с учетом migration-описания для каждой новой версии php (написано на оф. сайте), либо обратиться к партнерам.
У вас остались какие-либо вопросы?
в php5 не было жесткой проверки с чем вы работатете с массивом или строкой, в 7 версии есть
объявите сначала переменную, затем присвойте ей значение
а про подробности вас спрашивают что этим вы хотите получить, зачем вам это условие вообще, если у вас и так это значение отсутсвует





