Часть 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. Правка обращений напрямую к базе
- Включаем режим отладки, чтобы видеть ошибки. В файле /bitrix/.settings.php ставим переменную debug в true.
- Пишем функцию подключения к базе в отдельный файл, чтобы при смене логина-пароля необходимо было править в одном месте.
$mysqli= new mysqli('localhost', '...', '...', '...');
- В темплейтах, где использовалось подключение к базе не через функции Битрикса:
- Вызываем функцию подключения к базе.
- Меняем конструкции вида
$rows = mysql_query($qu); while($row = mysql_fetch_array($rows))
на
$result = $mysqli->query($qu); while($row = $result->fetch_array(MYSQLI_BOTH)).
Я меняла не абсолютно, а используя перед вызовом функций проверку на версию php. Если версия стара — то вызов старой функции, если нова — то новой.
- Помним, что новшества работой с базой не ограничиваются. Возможно, вы используете устаревшие функции, которые также будут выдавать ошибку. Например — split отменен, за него теперь explode (структура вызова функции — та же). Ereg и его производные больше не используются, заменены на близкие preg. Тут, конечно, включенный режим отладки здорово помогает.