Pull to refresh

Фатальная ошибка 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.: Продукт, который не заботится о своих пользователях, а только гонится за новыми релизами, обречен на закрытие.

Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.