Битрикс. Переход на php7

Часть 1. Стандартные правки для перехода Битрикса

Битрикс совместим с php7 (конечно, совместимость плагинов не гарантируется, но большинство из них — работают в семерке).

Самое мощное отличие при переходе на php7 — использование расширения mysqli вместо mysql.   Для того, чтобы использовать mysqli, необходимо отредактировать два конфигурационных файла.

В файле /bitrix/php_interface/dbconn.php нужно добавить, если нет, в конец строчку

define("BX_USE_MYSQLI", true);

В файле /bitrix/.settings.php надо настроить connections:

  'connections' => 
  array (
    'value' => 
    array (
      'default' => 
      array (
        'className' => '\\Bitrix\\Main\\DB\\MysqliConnection',
        'host' => 'localhost',
        'database' => '...',
        'login' => '...',
        'password' => '...',
      ),
    ),
  ),

У меня на сайте есть работа напрямую с базой, не через функции Битрикса.  Так уж исторически сложилось, а править сотни строк кода — нет возможности-времени.  Поэтому мне приходилось переключаться между php 5 и 7 несколько раз, чтобы проверить работу того или иного модуля.
Чтобы не править конфигурационные файлы каждый раз при переключении, я внесла в них проверку на версию php:

$ver=phpversion(); if($ver[0]<7) ... else ....

Часть 2. Правка обращений напрямую  к базе

  1. Включаем режим отладки, чтобы видеть ошибки. В файле /bitrix/.settings.php ставим переменную debug в true.
  2. Пишем функцию подключения к базе в отдельный файл, чтобы при смене логина-пароля необходимо было править в одном месте.
      $mysqli= new mysqli('localhost', '...', '...', '...'); 
  3. В темплейтах, где использовалось подключение к базе не через функции Битрикса:
    1. Вызываем функцию подключения к базе.
    2. Меняем конструкции вида
      $rows = mysql_query($qu);
      while($row = mysql_fetch_array($rows))

      на

      $result = $mysqli->query($qu);
      while($row = $result->fetch_array(MYSQLI_BOTH)).
      

      Я меняла не абсолютно, а используя перед вызовом функций проверку на версию php. Если версия стара — то вызов старой функции, если нова — то новой.

    3. Помним, что новшества работой с базой не ограничиваются. Возможно, вы используете устаревшие функции, которые также будут выдавать ошибку. Например — split отменен, за него теперь explode (структура вызова функции — та же). Ereg и его производные больше не используются, заменены на близкие preg. Тут, конечно, включенный режим отладки здорово помогает.