Зачем переносить на PHP 7 сайт на «1С-Битрикс»?

Предыстория: прыжок к производительности через версию


Предыстория: прыжок к производительности через версию

В 2015 году язык PHP могучим прыжком перескочил от версии 5.6 сразу к седьмой. Широко анонсированная шестая версия с поддержкой Unicode в ядре зашла в тупик и была заброшена. Чтобы не сбивать с толку потребителей, следующей редакции сразу присвоили номер 7, минуя несчастливую шестерку.

Разработчики PHP 7 сосредоточились на повышении производительности. Усовершенствовали виртуальную машину Zend Engine, добавили абстрактное синтаксическое дерево Abstract Syntax Tree и провели рефакторинг внутренних структур. На выходе получилось двухкратное ускорение и 50% экономия памяти.


«1С-Битрикс» на PHP 7

Через год, летом 2016 года, вышла в свет платформа «1С-Битрикс» 16.5 на ядре D7 с полной поддержкой языка PHP 7. По результатам нагрузочного тестирования индекс производительности вырос в 2 раза, а использование памяти сократилось в 3 раза.

«1С-Битрикс» на PHP 7


Выгоды для бизнеса

Переход на PHP 7 дает ряд преимуществ владельцу сайта. Сокращение ресурсоемкости позволяет экономить на хостинге. Или повысить отказоустойчивость, резервируя аварийные ресурсы без дополнительных затрат. Ускорение выдачи страниц нравится всем: пользователи отвечают на него увеличением конверсии, а поисковики повышают позиции в выдаче.


А можно переехать попозже?

Это рискованно. Дело в том, что с января 2017 года прекратилась активная поддержка PHP 5.6. Регулярные обновления этой редакции больше не производятся, ошибки не исправляются. Критические уязвимости версии 5.6. будут устраняться до конца 2018 года, но по мере выявления. Например, если дыра в безопасности станет причиной скандальной утечки данных.



Подготовка перехода

1.      Сохраняем резервную копию сайта. Лучше всего в быстрое облако, наподобие Amazon Web Services;

2.      Выбираем новый хостинг, из числа бъявивших о поддержке PHP 7. В том числе Masterhost, SpaceWeb, Beget, «Джино» и другие. Проверяем, есть ли выбранный хостинг в списке сертифицированных для «1С-Битрикс»;

3.      Уточняем, активирован ли на хостинге драйвер базы данных MySQLi. Для этого нам потребуется изучить детальные настройки PHP. Создаем файл info.php со строкой

<?php phpinfo(); ?>

Загружаем его на сервер и запускаем. Если в отчете видим раздел MySQLi, то все в порядке.

MySQLi

4.      Инсталлируем «1С-Битрикс». Проверяем адекватность параметров хостинга, используя встроенный инструмент проверки (Настройки > Инструменты > Проверка системы). Если все строки зеленые, идем дальше. Если нет – пишем в техподдержку или меняем хостинг;

Проверяем адекватность параметров хостинга


Собственно переход

В настройках хостинга меняем версию PHP. Вот как это делается 3 популярных панелях управления хостингом.

cPanel – раздел «Программное обеспечение и службы», пункт «Выбор PHP-версии».

ISPmanager – раздел «Инструменты», подраздел «Версия PHP».

Parallels Plesk – вкладка «Сайты и домены», раздел «Смена версии PHP».

В других панелях ищите в разделах «Настройка сервера» или «Конфигурация PHP». Не забудьте указать режим FastCGI (не FPM!). Вот так меняется версия PHP на Timeweb:

«Настройка сервера» или «Конфигурация PHP»

Далее редактируем файлы конфигурации. Не используем для этого встроенный редактор «1С-Битрикс», результат будет непредсказуем! Надо скачивать файлы на локальную машину, редактировать там и выгружать на сервер по протоколу SSH (FTP).

  1. Редактируем файл .htaccess. Находим строку

<IfModule mod_php5.c>

И заменяем 5 на 7, как на рисунке ниже.

Htaccess

Обязательно сохраняем файл .htaccess в формате UNIX!

  1. Проверяем файл dbconn.php по адресу /bitrix/php_interface/. Ищем в нем строку

define("BX_USE_MYSQLI", true);

Если строки нет, добавляем ее в конец файла.

  1. Ищем файл settings.php по адресу /bitrix/. В нем должна быть строка

'className' => '\\Bitrix\\Main\\DB\\MysqliConnection',

Если строки нет, добавляем. Не спутайте MysqliConnection и MysqlConnection!

  1. Снова делаем проверку ошибок Настройки > Инструменты > Проверка системы. Устраняем возникшие ошибки.
  1. Восстанавливаем сайт из резервной копии. Тестируем, ищем и исправляем ошибки.

«1С-Битрикс: Веб-окружение» на случай дедлайна

Может так случиться, что на все эти телодвижения у вас совсем нет времени, зато в штате есть сертифицированный администратор «1С-Битрикс». Тогда поручите ему выбрать хостинг с CentOS 6+ и развернуть поверх операционной системы «1С-Битрикс: Веб-окружение» 7.1.х для Linux. Вы получите готовую к установке платформы «1С-Битрикс» среду, включающую PHP 7. После этого останется установить «1С-Битрикс: Управление сайтом» и развернуть сайт из резервной копии. Не пытайтесь повторить этот фокус без сертифицированного администратора!


Подводные камни перехода

На первых порах году переходу на PHP 7 мешала несовместимость модулей из Маркетплейс «1С-Битрикс», написанных на PHP 5.6 и более ранних версий. Но за прошедший год разработчики выпустили уже 107 модулей, поддерживающих PHP 7. В том числе готовые магазины и корпоративные сайты, модули сервисов доставки, доски объявлений и другие.

После выхода PHP версии 7.1. возникла новая проблема. В ходе переноса редакций «1С-Битрикс» с 16.5.4 по 17 может возникать ошибка

Error] [] operator not supported for strings (0)

Это приводит к сбоям установки «1С-Битрикс» на сервер с PHP 7.1+. В результате, например, может слетать стартовый рабочий стол.

Сбои при установке «1С-Битрикс» на сервер с PHP 7.1+

Чтобы устранить эту проблему, нужно заменить кавычки на квадратные скобки в двух строках двух скриптов. Сначала найдите файл

/bitrix/modules/iblock/classes/general/iblockproperty.php

Найдите в нем строку

$arSqlSearch = "";

И замените ее на строку

$arSqlSearch = [];

Затем отредактируйте файл

/bitrix/modules/main/classes/general/checklist.php

Найти в нем строку

$arSqlWhere = "";

И замените на строку

$arSqlWhere = [];


Измеримые результаты переноса

Проверяем производительность в разделе Настройки > Производительность > PHP.

Производительность ДО

Производительность ПОСЛЕ перехода на php 7

Индекс производительности до перехода – 34,56, после перехода – 60,36. Прирост 175%.

Результат

Кроме того, в 1,77 раз выросла нагрузочная способность (с 45 до 80 страниц в секунду). А время отдачи страницы уменьшилось в 2,25 раз, с 3,6 до 1,6 секунд.


Услуги WRP по переносу сайта на PHP 7

Золотой партнер «1С-Битрикс», веб-студия WRP проводит весь комплекс работ по переносу сайтов на PHP 7. Программисты студии выполняют тестирование и настройку хостинговых площадок, привлекая при необходимости службы техподдержки хостинга. После окончательной настройки производится установка сайта из резервной копии, проверка ошибок, доработка функционала.

Перенос корпоративного сайта занимает от 4, интернет – магазина от 7 рабочих дней. Стоимость работ начинается от 20 000 рублей.


Советы разработчикам

Детальное описание нюансов вы найдете в официальном руководстве по переносу Migrating from PHP 5.6.x to PHP 7.0.x. В том числе список обратно несовместимых решений, зарезервированных слов и новых функций.

Дата публикации: 24 Ноября 2017