Почему не устанавливается 1с битрикс на php 8?

Рейтинг: 2Ответов: 3Опубликовано: 14.06.2023

Пытаюсь поставить на openserver, недавно уже ставил все работало, но там php требовался от 7 версии, сейчас скачал новый установщик (php скрипт), теперь там php версия от 8, появляется эта ошибка в самом начале установки:

Повторите установку текущего шага. В случае повторения ошибки пропустите шаг. Fatal error: Allowed memory size of 1610612736 bytes exhausted (tried to allocate 262144 bytes) in C:\OSPanel\domains\bitrix.test\bitrix\modules\main\lib\security\random.php on line 218 Fatal error: Allowed memory size of 1610612736 bytes exhausted (tried to allocate 262144 bytes) in Unknown on line 0 Fatal error: Allowed memory size of 1610612736 bytes exhausted (tried to allocate 262144 bytes) in C:\OSPanel\domains\bitrix.test\bitrix\modules\main\lib\session\handlers\abstractsessionhandler.php on line 78

В php.ini memory_limit ставил на -1 и просто увеличивал, не помогает, что делать?

Ответы

▲ 0

Как вариант, попробуйте в файле

\bitrix\modules\main\lib\session\handlers\abstractsessionhandler.php

в строке

$this->lastCreatedId = Random::getString(32, true);

вместо 32 поставить 16

$this->lastCreatedId = Random::getString(16, true);
▲ 0

Мне помогло только полное закрытие функции getString в файле

\bitrix\modules\main\lib\security\random.php

В самой функции сразу же делаю return "...";

public static function getString($length, $caseSensitive = false)
{
    return "qwerty";
    
    //...
}
▲ 0

В интернете ответ уже есть, пусть тут тоже будет, вдруг кто наткнется.

при установке изменить в файле /bitrix/modules/main/lib/security/random.php в методе getStringByCharsets($length, $charsetList) - строка 114.

Внимание! После установки Битрикса в файле возвращаем всё обратно, иначе не работает авторизация вообще!

public static function getStringByCharsets($length, $charsetList)
{
    // Временно возвращаем "свою" рандомную строку
    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $randstring = '';
    for ($i = 0; $i < 10; $i++) {
        $randstring = $characters[rand(0, strlen($characters))];
    }
    return $randstring; // Конец

 $charsetVariants = strlen($charsetList);
 $randomSequence = static::getBytes($length);

 $result = '';
 for ($i = 0; $i < $length; $i++)
 {
    $randomNumber = ord($randomSequence[$i]);
    $result .= $charsetList[$randomNumber % $charsetVariants];
 }
 return $result;
}