Как стать автором
Обновить

Фатальная ошибка BitrixSetup

Предисловие

Продукты 1С-Битрикс часто имеют не однозначную оценку со стороны разработчиков. Это в основном обусловлено тем, что продукт разрабатывается с 2002 года и имеет большое количество старой кодовой базы, а также очень широкий функционал, который тяжело поддерживать даже большой команде разработчиков, а тем более вовремя писать подробную документацию. Ну и главное наверное, это то, что продукт рассчитан больше на пользователя, чем на разработчика.

Но есть вещи, которые не оправдывает ни один из вышеперечисленных фактов.

Устанавливаем BitrixSetup

У нас стандартное веб окружение LAMP:

  • L - Ubuntu 16.0

  • A - Apache 2.4

  • M - Mysql 5.4

  • P - php 7.0

Устанавливаем BitrixSetup и получаем фатальную ошибку:

Ошибка находится в файле "/bitrix/modules/main/lib/httpapplication.php":

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

<?
public function run()
	{
		try
		{
			$router = new Router($this->context->getRequest());

			/** @var Controller $controller */
			/** @var string $actionName */
			[$controller, $actionName] = $router->getControllerAndAction();
			if (!$controller)
			{
				throw new SystemException('Could not find controller for the request');
			}

			$this->runController($controller, $actionName);
		}
		catch (\Throwable $e)
		{
			$errorCollection = new ErrorCollection();

			$this->processRunError($e, $errorCollection);
			$this->finalizeControllerResult($controller ?? null, null, $errorCollection);
		}
	}

На этой строке мы массиву присваиваем метод, именно это присвоение и вызывает ошибку. На просторах интернета мною не было найдено решение этой фатальной ошибки, то есть никто о ней не пишет, в том числе и на официальном ресурсе 1С-Битрикс. Как видно из источника https://www.php.net/manual/ru/function.list.php присваивание массива в php работает только с версии 7.1, в данном коде мы не видим проверки на версию php, в документации мы видим информацию о версии php, ниже которой нельзя использовать продукт https://www.1c-bitrix.ru/products/cms/requirements.php

К чему весь этот пост, ведь по сути мы устанавливаем чистый продукт и логично, что мы ставим версию php указанную как минимальную, но здесь есть несколько "НО":

  1. Разработчики 1С-Битрикс всегда говорили о поддержке обратной совместимости, и дескать именно из-за этого большие проблемы с поддержкой кода, тяжело проходят рефакторинги и долгие релизы, но представим, что у вас есть старый проект, который вы можете перенести только выгрузив ветку шаблона сайта с разделами, так как хранить весь "1С-Битрикс" вам не позволяет количество ресурсов, если у вас не один проект, а множество. Проект со старой кодовой базой установить на чистый установленный продукт не представляется возможным.

  2. Самое главное, появляются ошибки с версиями php 7.4.*, а на php 8.0.* инсталлятор вообще отказывается работать, почему бы не указать явно какие версии php использует продукт.

Заключение

Что мы имеем по итогу:

  • Для быстрой работы продукта нам нужна виртуальная машина 1С-Битрикс, а с другими часто приходится кастомизировать элементы зависящие от ядра тем самым теряя возможность обновлений.

  • Для разработки и поддержки продукта нам нужен разработчик, который умеет работать с mix кодом, BX.jquery и т.д., а таких нужно еще поискать.

  • При обновлениях продукта по факту нет обратной совместимости, нельзя обновить ядро с поддержкой php 7.0, например.

  • Большое количество сайтов в связи с тяжелой кодовой базой 1С-Битрикса находятся на старом не безопасном коде и обновится не могут.

    Получается, это дорого, не безопасно и не понятно перспективно ли? С любой новой версией php 1С-Битрикс может просто остаться на обочине развития веб разработки.

P.S.: Продукт, который не заботится о своих пользователях, а только гонится за новыми релизами, обречен на закрытие.

Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.