X

Битрикс, PHP 7 и restore.php

Если вы еще не восстанавливали/переносили Битрикс на свеженький (или не очень) сервер с PHP 7, то вы счастливый человек. Нет, сам Битрикс на PHP 7 работает более чем хорошо, я бы даже сказал, что намного лучше, чем на 5.X.

Т.е. все прекрасно, кроме самого процесса переноса. Если вы воспользуетесь официальным инструментом от Битрикса – скриптом restore.php, то столкнетесь с проблемами. Собственно, как только дело дойдет до восстановления базы данных – сервер упадает в 500 ошибку, а в логах появится следующая запись:

PHP Fatal error:  Uncaught Error: Call to undefined function mysql_connect() in /var/www/html/restore.php:1328
Stack trace:
#0 /var/www/html/restore.php(670): CDBRestore->Connect()
#1 {main}
  thrown in /var/www/html/restore.php on line 1328

Т.е. в скрипте по прежнему используется старая библиотекой php для работы с MySQL, вместо mysqli – уже как несколько лет обозначенной, как единственно верное и поддерживаемое решение.
А в PHP 7 больше нет поддержки старой библиотеки для mysql, это известно всем, кроме тех людей которые занимаются скрипом восстановления (я уверен, что им уже сказали, но пока они раскачаются…).

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

Собственно решение тут одно, взять и поправить код скрипта, благо правок так немного. Что и было сделано:

  • Убран код, который скачивает свежую версию скрипта с Битрикса и подменяет текущий файл;
  • Собственно все старые не поддерживаемые функции заменены на аналоги из mysqli

Скачать: bitrix_restore_php7

Как только в Битрикс выпустят свою нормальную версию – ссылку заменю на официальный продукт.

Upd: Вышел официальный restore.php с поддержкой mysqli.

hc: