Блог


Как исправить ошибку установки Битрикс на OpenServer c php8

Что имеем:

  • Bitrix+OpenServer+PHP8+Windows (при другой связке этой ошибки может не быть)
Ошибка установки:

Внимание! На данном шаге произошла ошибка установки продукта.

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




Проблема:
  • Обнаружил, что на момент 2023/10, дистрибутив Битрикса не позволяет произвести установку на OpenServer, так как новый дистрибутив требует php8
  • При установке мы получаем ошибку переполнения памяти и прекращение установки модуля

Решение:
  1. Находим файл /bitrix/modules/main/classes/general/main.php
  2. Находим строчку 3407
  3. Заменяем переменную $uniq на

    $uniq = md5(uniqid(rand(), true));

  4. Перезапускаем установку, теперь всё должно работать



Чего делать точно не нужно:
  • Увеличивать память в конфигах, как многие советуют. Это не поможет.
Обратите внимание, важно!
  • Решение временное, только для установки, только под Windows.
  • Не модифицируйте ядро на рабочих проектах, это может нарушить работоспособность при получении обновлений системы
  • Под ядром мы понимаем всё, что в папке /bitrix/*, за исключением своих компонентов и шаблонов

dirname

Используется в PHP 4, PHP 5, PHP 7, PHP 8
dirname — Возвращает имя родительского каталога из указанного пути (параметр1 функции)

Синтаксис:
dirname(параметр1, параметр2);

параметр1 Путь
параметр2 На сколько уровней вложенности вверх необходимо пройти необязательный с версии 7.0.0


Пример:
<?
dirname(__FILE__); // получаем директорию текущего файла
?>

Запись массива в cookies


$films = array("Рэмбо", "Рэмбо 2", "Рэмбо 3");
setcookie('cookie_films', serialize($films));

$get_films = unserialize($_COOKIE['cookie_films']);
print_r($get_films);
Область применения, пример:
Допустим есть потребность хранить просмотренные или избранные товары.
Пользователь у нас не авторизован, поэтому решаем хранить данные просмотренных товаров в куках. В массиве храним ID товаров.

[ОШИБКА] Warning: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"?

Распаковал старый архив проекта на Битрикс и словил ошибку в админке, которая появляется в инфоблоках:
Warning: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"?

Причина:
Слишком новый PHP.

Решение:
Сделать откат версии PHP. Поставил в настройках php5.6 (был 7+) и всё заработало.




Сделать заглавные буквы в ФИО

Клиент прислал массив пользователей системы для импорта. Единственная загвоздка была в том, что ФИО все были написаны "капсом".

Примерно так:
ИВАНОВ ИВАН ИВАНОВИЧ
ПЕТРОВА МАРИЯ ПЕТРОВНА

Появилась задача привести их все в нормальный вид.

Решение:
Помогла функция mb_convert_case(); (производит смену регистра символов в строке).


<?
$fio = "ПЕТРОВА МАРИЯ ПЕТРОВНА";
$fio = mb_convert_case($fio, MB_CASE_TITLE, 'UTF-8');
echo $fio; // Петрова Мария Петровна
?>

Работа с массивами на PHP

1. Знакомимся с массивами Array()
2. Выводим на экран с помощью echo, print_r()
3. Ссылка на все функции Array http://php.net/manual/ru/ref.array.php

Немного про PHP переменные, условия, циклы

Создаем счетчик посещений на PHP на файле

1. Читаем содержимое файла с помощью file_get_contents()
2. Переписываем файл с помощью file_put_contents()

Складываем время на PHP

1. Читаем массив строк из файла с помощью file() и for()
2. Складываем время с помощью элементарных математических функций

Встроенный инструмент Битрикс - Командная PHP строка

Как вывести дату и время. Вывод даты в дизайн шаблоне (Битрикс).

Как вывести дату и время на PHP. Вывод даты и времени по русски. (Битрикс)

Как вывести дату и время на PHP. Вывод даты на странице (Битрикс)

Как сохранить в файл в PHP


<?
file_put_contents("log.txt","test");
?>


Дневник 1 - 14 из 14
Начало | Пред. | 1 | След. | Конец