Бесплатный экспресс-аудит сайта Безопасность, SEO, AI-поиск и 152-ФЗ — отчёт с баллами за минуту Проверить сайт
Обсудить проект

Deprecated: Passing null to parameter — что это значит и как убрать

Полный текст выглядит примерно так:

Deprecated: Passing null to parameter #1 ($string) of type string is deprecated in /home/site/public_html/bitrix/templates/main/header.php on line 42

Номер параметра, его имя и файл будут свои, смысл один: в функцию передали null там, где она ждёт строку.

Откуда это берётся

До PHP 8.1 язык молча превращал null в пустую строку. С 8.1 он об этом предупреждает, потому что в будущих версиях такой вызов станет ошибкой. На сайте с историей поводов много:

  • свойство инфоблока не заполнено, а шаблон сразу передаёт значение в trim(), htmlspecialchars() или strlen();
  • параметр компонента не задан, и его значение уходит в функцию обработки строк;
  • поле пользователя пустое, а код считает, что там всегда что-то есть.

Как починить

Правка всегда одна и та же: привести значение к строке до вызова функции.

  1. Найдите строку из сообщения — файл и номер строки там указаны точно.
  2. Посмотрите, какое значение уходит в функцию и почему оно может быть пустым.
  3. Подставьте пустую строку по умолчанию: вместо trim($value) напишите trim((string)$value), либо $value ?? ''.
  4. Повторите для остальных мест — обычно их немного, просто вызываются часто.

Если сообщение указывает на файл внутри /bitrix/modules/, править его руками нельзя: правка исчезнет при обновлении. Для модулей вендора нужно обновление продукта, для модулей Маркетплейса — обновление решения или обращение к его разработчику.

Чем это отличается от фатальной ошибки

Уведомление об устаревании сайт не роняет: страница отрисуется. Но тот же null, переданный в типизированный параметр метода, даёт уже фатальную ошибку TypeError и белый экран — разбор этого случая в отдельной инструкции.

Что сделать на боевом сайте прямо сейчас

Проверьте, что вывод ошибок посетителям выключен, а запись в журнал — включена. Посетитель не должен видеть пути к файлам, но вам нужен список того, что чинить. Сам список удобнее собирать на копии сайта с включённым отладочным режимом.

Частые вопросы

Можно просто отключить показ этих сообщений?

Можно — и на боевом сайте вывод ошибок действительно должен быть выключен. Но отключение не решает проблему: в следующих версиях PHP те же вызовы станут фатальной ошибкой, и сайт упадёт. Считайте уведомления списком дел, а не шумом.

Почему сообщений тысячи?

Потому что проверка срабатывает на каждом вызове. Один проблемный вызов в шапке сайта даёт по сообщению на каждую страницу. Обычно за тысячами сообщений стоит десяток мест в коде.

Сообщения появились, а сайт работает. Это срочно?

Не срочно, но и не «потом»: если журнал ошибок пухнет, место на диске кончается быстрее, чем кажется, а за гигабайтами одинаковых строк теряются настоящие ошибки.