Ошибки

PHP: Warning: Undefined variable и Undefined array key — что делать

Скрипт берёт переменную или элемент массива, которых нет. Это предупреждение: страница продолжает работать, а вместо значения PHP подставляет null. На рабочем сайте такие строки должны уходить в журнал, а не на страницу.

≈ 5 мин чтения
Содержание 8

Как выглядит ошибка

PHP Warning:  Undefined variable $name in /var/www/example.com/index.php on line 12
PHP Warning:  Undefined array key "id" in /var/www/example.com/product.php on line 5
  • Undefined variable $name — скрипт обратился к переменной $name, которой ничего не присвоено.
  • Undefined array key "id" — в массиве нет элемента с ключом id. Если ключ — число, он пишется без кавычек: Undefined array key 3.
  • in … on line 12 — файл и строка, где это случилось.

Рядом бывает третье предупреждение — Trying to access array offset on null: скрипт берёт элемент массива из переменной, в которой вообще нет массива, а лежит null.

Это Warning — предупреждение, а не фатальная ошибка: скрипт не останавливается. Ломается сайт не от самого предупреждения, а от того, что дальше код работает с пустым значением: товар не находится, форма не сохраняется.

Почему это появилось после обновления PHP

До PHP 8.0 те же случаи давали уведомление Notice — уровень ниже предупреждения, и текст был другой: Undefined variable: name, Undefined index: id, Undefined offset: 3. В PHP 8.0 их сделали предупреждениями Warning и переписали текст. Код сайта при этом не изменился — изменилось то, как PHP о нём сообщает.

Какая версия PHP стоит у вас — как узнать. В Ubuntu 24.04 — PHP 8.3.

Если сообщение видно прямо на странице

На рабочем сайте посетители не должны видеть сообщения PHP: показ на страницах включают только для отладки. Если строки Warning видны на сайте — показ включён. Кроме того, такая строка, выведенная до заголовков, ломает перенаправления и вход: появляется Cannot modify header information.

WordPress. Откройте wp-config.php (как открыть и сохранить) и найдите строку WP_DEBUG. Если там true, добавьте под ней строку, которая запрещает выводить ошибки на страницы:

define( 'WP_DEBUG_DISPLAY', false );

Если WP_DEBUG включали для поиска ошибки и он больше не нужен — поставьте false.

Другой сайт на PHP. Команды вводятся на сервере: подключитесь к нему по SSH (как подключиться) и набирайте их в том же окне. Посмотрите настройку показа ошибок:

grep -n '^display_errors' /etc/php/8.3/fpm/php.ini

В Ubuntu там стоит display_errors = Off. Если у вас On — откройте файл:

sudo nano /etc/php/8.3/fpm/php.ini

Нажмите Ctrl+W, введите display_errors = и нажмите Enter — курсор встанет на строку с этой настройкой. Поставьте Off, сохраните файл: Ctrl+O, Enter, Ctrl+X. Перезапустите PHP:

sudo systemctl restart php8.3-fpm

Если команда ничего не ответила, PHP перезапущен. Если показ не пропал, его включает сам сайт — поищите в его настройках режим отладки.

Сообщения при этом никуда не денутся: на сайте под nginx они попадают в журнал nginx — sudo tail -n 30 /var/log/nginx/error.log. В такой строке есть слова FastCGI sent in stderr и PHP message: PHP Warning:.

Как исправить в своём коде

Проверяйте, что значение есть, прежде чем его брать. Для данных из адреса и форм удобен оператор ??: он берёт значение справа, если слева ничего нет, и не выдаёт предупреждения:

$id = $_GET['id'] ?? 0;
$name = $_POST['name'] ?? '';

Проверить, что переменная задана, можно через isset:

if (isset($user['email'])) {
    echo $user['email'];
}

Для переменных, которые заполняются только при каком-то условии, задайте значение заранее, до условия: $name = '';.

Если ошибка в плагине или теме

Путь в сообщении подскажет, чей это файл: в WordPress это папки wp-content/plugins/имя-плагина/ и wp-content/themes/имя-темы/.

  1. Обновите плагин или тему — в новых версиях такие места исправляют.
  2. Если обновления нет — передайте разработчику сообщение целиком: текст, файл и строку.
  3. Пока исправления нет, уберите показ на страницах, как написано выше: сайт будет работать, а предупреждения останутся в журнале.

Не правьте файлы плагина сами: при обновлении плагина правки пропадут.

Ошибки рядом

Что видитеЧто делать
Cannot modify header information - headers already sentвывод до заголовков
Call to undefined functionфункции нет или не стоит модуль
Class "…" not foundне подключён класс
в WordPress «На сайте возникла критическая ошибка»разбор
другая ошибка PHPнайдите её в списке

Источники

Сверено 14 октября 2026 года.

Что почитать дальше