Техподдержка сайтов
+7 (904) 589-06-04
+7 (904) 589-06-04
telegram @sng24
MAX
info@sng-it.ru
ПРОГРАММИСТ 1С-БИТРИКС
ПРОГРАММИСТ 1С-БИТРИКС
разработка · доработка · техподдержка
  • О себе
  • Услуги
    Обновление сайтов на 1С-БитриксPHP 8.2+, MySQL 8, ядро и модули›Поиск и удаление вирусовПроверка, очистка и защита сайта›Создание сайтовРазработка сайтов под задачи бизнеса›Интеграция сайта с 1СОбмен товарами, остатками и заказами›Композитный сайт›Внутренняя оптимизация сайтаТехническое SEO и оптимизация›Доработка сайтовНовые функции, интеграции, нестандартные решения›Импорт каталога из файла поставщикаИмпорт и обновление товарных данных›Перенос сайта на 1С БитриксМиграция сайта на 1С-Битрикс›Парсинг контентаСбор и импорт данных›Установка готового сайтаУстановка и настройка готового решения›Купить лицензию 1С Битрикс›Битрикс 24CRM и автоматизация бизнеса›Выгрузка товаров в Яндекс.Маркет›Настройка служб доставкиИнтеграция служб доставки›Интеграция с соцсетями›Заказ на Маркете›Перевод сайта на https›Сопровождение сайтов на 1С БитриксОбслуживание и развитие сайтов›Настройка платежных системПодключение и настройка оплаты›
    Все услуги →
  • Портфолио
  • Готовые сайты
    Недвижимость›Медицина›Ресторанный бизнес›Автомобили и автозапчасти›Бухгалтерские и юридические услуги›Государство›Детские товары›Красота и здоровье›Мебель, интерьер, декор›Образование›Одежда и обувь›Подарки и сувениры›Продукты питания›Спорт, туризм и отдых›Строительство, ремонт, инструменты›Товары для животных›ТСЖ, ЖСК›Украшения, аксессуары, подарки›Электроника и бытовая техника›Универсальные›
    Все готовые сайты →
  • 1С Битрикс
    Старт (7 100 ₽)›Стандарт (20 500 ₽)›Малый бизнес (47 000 ₽)›Бизнес (96 500 ₽)›Интернет-магазин + CRM (109 000 ₽)›Продление лицензии›Сравнить редакции›
  • CRM
  • Контакты
ПРОГРАММИСТ 1С-БИТРИКС
ПРОГРАММИСТ 1С-БИТРИКС
О себе
Услуги
Портфолио
Готовые сайты
1С Битрикс
CRM
Контакты
ПРОГРАММИСТ 1С-БИТРИКС
ПРОГРАММИСТ
1С-БИТРИКС
  • Главная
  • О себе
  • Услуги
    • Назад
    • Услуги
    • Обновление сайтов на 1С-Битрикс
    • Поиск и удаление вирусов
    • Создание сайтов
    • Интеграция сайта с 1С
    • Композитный сайт
    • Внутренняя оптимизация сайта
    • Доработка сайтов
    • Импорт каталога из файла поставщика
    • Перенос сайта на 1С Битрикс
    • Парсинг контента
    • Установка готового сайта
    • Купить лицензию 1С Битрикс
    • Битрикс 24
    • Выгрузка товаров в Яндекс.Маркет
    • Настройка служб доставки
    • Интеграция с соцсетями
    • Заказ на Маркете
    • Перевод сайта на https
    • Сопровождение сайтов на 1С Битрикс
    • Настройка платежных систем
  • Портфолио
  • Готовые сайты
    • Назад
    • Готовые сайты
    • Недвижимость
    • Медицина
    • Ресторанный бизнес
    • Автомобили и автозапчасти
    • Бухгалтерские и юридические услуги
    • Государство
    • Детские товары
    • Красота и здоровье
    • Мебель, интерьер, декор
    • Образование
    • Одежда и обувь
    • Подарки и сувениры
    • Продукты питания
    • Спорт, туризм и отдых
    • Строительство, ремонт, инструменты
    • Товары для животных
    • ТСЖ, ЖСК
    • Украшения, аксессуары, подарки
    • Электроника и бытовая техника
    • Универсальные
    • Разное
  • 1С Битрикс
    • Назад
    • 1С Битрикс
    • Старт (7 100 ₽)
    • Стандарт (20 500 ₽)
    • Малый бизнес (47 000 ₽)
    • Бизнес (96 500 ₽)
    • Интернет-магазин + CRM (109 000 ₽)
    • Продление лицензии
    • Сравнить редакции
  • CRM
  • Контакты
  • Личный кабинет
  • +7 (904) 589-06-04
Будьте на связи
info@sng-it.ru
  • Вконтакте
  • YouTube

Ошибки при переходе сайта на битриксе на php 8.1

  • Главная
  • ❶ Сниппеты
  • ❷ Ошибки при переходе сайта на битриксе на php 8.1

После перевода нескольких десятков сайтов на 1С Битрикс с php 7.4 на php 8.1 собрал в статье полезные решения ошибок.

Сделаю краткий обзор основных типов ошибок и приведу решения их устранения.

1. Не статичный метод вызывается статично


[TypeError] 
call_user_func_array(): Argument #1 ($callback) must be a valid callback, non-static method CKladr::SetLocation() cannot be called statically (0)
Решение:
Находим файл, в котором прописан метод CKladr::SetLocation и указываем у него static
Пример:

public static function SetLocation(){
...
}

2. Нет проверки типа данных при использовании функции для определенно типа данных

php 8 стал более строгий, теперь переменные нужно проверять перед использованием методом, относящихся к определенному типу данных


1. Fatal error:  Uncaught TypeError: count(): Argument #1 ($value) must be of type Countable|array, bool given in /home/bitrix/ext_www/cin.ru/bitrix/modules/security/classes/general/antivirus.php:559
Решение:
Делаем проверку типа данных.
Пример 1. Проверка массива:

[TypeError] 
implode(): Argument #2 ($array) must be of type ?array, string given (0)

[TypeError] 
array_key_exists(): Argument #2 ($array) must be of type array, string given (0)

[TypeError] 
count(): Argument #1 ($value) must be of type Countable|array, null given (0)

[TypeError] 
array_filter(): Argument #1 ($array) must be of type array, bool given (0)

[TypeError] 
array_multisort(): Argument #1 ($array) must be an array or a sort flag (0)

[TypeError] 
array_unique(): Argument #1 ($array) must be of type array, null given (0)

[TypeError] 
in_array(): Argument #2 ($haystack) must be of type array, bool given (0)

Решение:

if(is_array($ar) && count($ar)>5){
...
}
Пример 3. Проверка массива:

[TypeError] 
array_key_exists(): Argument #2 ($array) must be of type array, string given (0)

Решение:

if(!array_key_exists($arFirstLvl, $arItem['IBLOCK_SECTION_ID'])){

меняем на 

if(is_array($arItem['IBLOCK_SECTION_ID']) && !array_key_exists($arFirstLvl, $arItem['IBLOCK_SECTION_ID'])){

Пример 4. Проверка массива:

[TypeError] 
array_filter(): Argument #1 ($array) must be of type array, bool given (0)

Решение:

$arItem['PROPERTIES']['SIMILAR_SWITCH']['VALUE'] = array_filter($arItem['PROPERTIES']['SIMILAR_SWITCH']['VALUE']);
	
меняем на 
	
if(is_array($arItem['PROPERTIES']['SIMILAR_SWITCH']['VALUE'])){
	$arItem['PROPERTIES']['SIMILAR_SWITCH']['VALUE'] = array_filter($arItem['PROPERTIES']['SIMILAR_SWITCH']['VALUE']);
}
Пример 5. Проверка числа:

[TypeError] 
gmdate(): Argument #2 ($timestamp) must be of type ?int, string given (0)

Решение:

header('Last-Modified: ' . gmdate('D, d M Y H:i:s', $lastModified) . ' GMT');
		
to

if(intval($lastModified)>0){
	header('Last-Modified: ' . gmdate('D, d M Y H:i:s', $lastModified) . ' GMT');
}

3. Не статичный метод не может быть определен как статичный


[Error] 
Non-static method Countrymask\Unitools::isAdminPage() cannot be called statically (0)
Возможно метод по ошибке установлен как static

заменяем 
public static function Location(){
...
}

на 

public function Location(){
...
}

4. Не отображаются наименования сторонних модулей в меню настроек модулей

В стороннем модуле может не быть конструктора и лэнги задаются в методе одноименным с классом. В php 7.4 это работало, но в php 8.1 нужно использовать __construct():

	function recaptchafree()
	{
		$this->MODULE_NAME = GetMessage("CAPTCHA_INSTALL_NAME");
		$this->MODULE_DESCRIPTION = GetMessage("CAPTCHA_INSTALL_DESCRIPTION");
                ...
	}
заменяем на 

	function __construct()
	{
		$this->MODULE_NAME = GetMessage("CAPTCHA_INSTALL_NAME");
		$this->MODULE_DESCRIPTION = GetMessage("CAPTCHA_INSTALL_DESCRIPTION");
                ...
	}

5. Ключ в массиве, заданный без кавычек, будет обрабатываться как константа.

Если константа не определена, то появляется соответствующая ошибка:

Undefined constant "HTTP_USER_AGENT" (0)
Самая частая ошибка, обязательно у ключа в ассоциативном массиве должны быть кавычки:

$_SERVER[HTTP_USER_AGENT] 

заменяем на 

$_SERVER['HTTP_USER_AGENT'] 

6. В некоторых функциях обязательно должен быть задан аргумент.


[ArgumentCountError] 
mktime() expects at least 1 argument, 0 given (0)
Пример:

заменяем 
mktime() 
на 
mktime(0)

7. Синтаксис доступа к смещению массива и строки с фигурными скобками больше не поддерживается.


[ErrorException] E_COMPILE_ERROR
Array and string offset access syntax with curly braces is no longer supported (0)
Пример:

$type0 = $type{0};	 
	
меняем на 

if(!is_array($type[0])){	
      $type0 = $type[0];
}	

8. На php 8.0 работает, ошибки php показывает, но на php 8.1 выдает 502 Bad Gateway

В модуле Проактивная защита ставим исключение: Маски исключения: /bitrix/*

Теги: php8, TypeError, Fatal error, Error, ошибки php, Undefined constant, ErrorException

01.03.2023

Поделиться:
Назад к списку
  • Услуги
  • Обновление сайтов на 1С-Битрикс
  • Поиск и удаление вирусов
  • Интеграция сайта с 1С
  • Создание сайтов
  • Композитный сайт
  • Внутренняя оптимизация сайта
    • Доработка сайтов
    • Импорт каталога из файла поставщика
    • Парсинг контента
    • Перенос сайта на 1С Битрикс
    • Установка готового сайта
    • Купить лицензию 1С Битрикс
      • Битрикс 24
        • Выгрузка товаров в Яндекс.Маркет
        • Заказ на Маркете
        • Интеграция с соцсетями
        • Настройка служб доставки
        • Перевод сайта на https
        • Сопровождение сайтов на 1С Битрикс
        • Настройка платежных систем
        Аудит сайта
        Записаться на техподдержку

        Программист 1С-Битрикс — Семён Голиков
        Программист 1С-Битрикс
        разработка · доработка · техподдержка
        Работаю с 1С-Битрикс с 2010 года
        Есть задача по 1С-Битрикс?
        Выберите удобное время в календаре техподдержки.
        Выбрать времяНаписать в Telegram
        Услуги
        Доработка сайтовСопровождение сайтовОбновление 1С-БитриксПоиск и удаление вирусовИнтеграция с 1СХостинг для битрикса
        Проекты и продукты
        ПортфолиоГотовые сайтыЛицензии 1С-БитриксБитрикс24Отзывы
        Материалы
        БлогСниппетыВидеоурокиОптимизация сайтаАкции
        Связаться со мной
        +7 (904) 589-06-04Позвонитьinfo@sng-it.ruНаписать на e-mail
        Telegram M MAX
        Обычно отвечаю в течение дня
        © 2010-2026 Семён Голиков · программист 1С-Битрикс
        Политика конфиденциальностиОбработка персональных данныхКарта сайта
        VK
        Спасибо за заявку!
        Мы свяжемся с Вами в ближайшее
        время и ответим на все вопросы.
        Заполните форму и отправьте
        заявку на консультацию!