PHP: Warning: Undefined variable / Undefined array key

  • Обновлено
  • Чтение ≈ 4 минуты

Краткий ответ

Предупреждения возникают при обращении к необъявленной переменной или несуществующему ключу массива. Проверяйте isset(), ?? и инициализируйте переменные.

В этой статье
  1. Что означает ошибка
  2. Причины и решения
  3. Пошаговое решение
  4. Как исправить в своём коде
  5. Если ошибка в чужом коде (CMS, плагин, тема)
  6. Поиск проблемных мест
  7. Чего не делать

#Что означает ошибка

Сообщение
Undefined array key

«Warning: Undefined variable $x» и «Warning: Undefined array key "name"» (PHP 8) означают, что код обращается к переменной или ключу массива, которых нет. В PHP 8 обращение к отсутствующему ключу массива выдаёт Warning, тогда как раньше это обычно было Notice; уровень сообщений для разных случаев зависит от версии PHP. Сайт обычно продолжает работать, но предупреждения засоряют вывод и могут ломать JSON и заголовки.

Предупреждение обычно возникает в коде приложения, но может быть спровоцировано изменением входных данных или несовместимым сторонним модулем.

Исправляется инициализацией или проверкой перед использованием.

Предупреждения возникают при обращении к необъявленной переменной или несуществующему ключу массива. Проверяйте isset(), ?? и инициализируйте переменные.

#Причины и решения

Возможная причинаКак узнатьЧто делать
Нет ключаМассив.Отсутствует необязательный ключ $_POST/$_GET или массиваПроверьте наличие, используйте ?? только с осмысленным умолчанием.
Не инициализированаПеременная.Переменная определяется лишь в одной ветке ifИнициализируйте перед ветвлением и тестируйте обе ветки.
ОпечаткаИмя.Ошибочное написание ключа или имени переменнойСверьте регистр и структуру данных.
Миграция версииPHP 8.После обновления PHP изменился уровень диагностикиИсправьте код и обновите несовместимые модули; не подавляйте логи.

#Пошаговое решение

  1. Откройте файл и строку из сообщенияОткройте журнал ошибок PHP для своего сайта или сообщение разработчика и найдите точные Undefined variable $name либо Undefined array key "name", имя файла и номер строки. В редакторе откройте файл именно той версии, которая выполняется на сервере, перейдите к строке; если это рабочий сайт, сначала сохраните копию кода или создайте ветку. Выясните, относится предупреждение к вашему PHP-коду или стороннему расширению. Предупреждение не всегда останавливает выполнение, но может испортить HTML/JSON или отправку заголовков.
  2. Определите, переменная это или ключ массиваЕсли сообщение Undefined variable, проследите, где переменная должна присваиваться: возможно, её инициализируют только внутри if, а используют после него. Если Undefined array key, откройте место построения массива/чтения $_GET, $_POST, JSON и проверьте, действительно ли такой ключ обязателен. Не полагайтесь на наличие поля формы только потому, что оно обычно отправляется. Для диагностики используйте локальный тестовый пример, не выводите в публичную страницу пароль или весь запрос.
  3. Добавьте проверку или значение по умолчаниюИсправляйте первопричину по смыслу: переменную можно явно инициализировать до ветвления ($total = 0;), для необязательного поля использовать $name = $_POST['name'] ?? '';, а для обязательного проверять наличие и валидировать значение с понятным сообщением. isset() возвращает false и для отсутствующего ключа, и для существующего ключа с null; array_key_exists() различает эти случаи. Не ставьте @ перед обращениями и не заменяйте все отсутствующие значения пустой строкой, если приложению нужен другой тип.
  4. Отключите показ ошибок на продакшенеЕсли предупреждение выводится посетителям на рабочем сайте, настройте журналирование ошибок до их скрытия. Найдите активный php.ini/настройку PHP-FPM или панель хостинга для конкретного сайта; включите log_errors=On, задайте доступный защищённый путь журнала и только затем display_errors=Off. Учтите, что php -i в командной строке показывает параметры CLI, которые могут отличаться от веб-PHP. Эти настройки не исправляют код: повторите запрос и проверьте, что предупреждение попало в закрытый журнал, а не в ответ API.
  5. Проверьте код статическим анализаторомДля собственного проекта установите анализатор в среде разработки через Composer (сначала проверьте текущие зависимости, резервную копию composer.json и composer.lock): composer require --dev phpstan/phpstan. Запустите vendor/bin/phpstan analyse src, заменив src реальной папкой проекта, и разберите сообщения об отсутствующих ключах/неопределённых переменных. Проверьте веб-версию PHP, реальные запросы с пропущенным полем и правильный формат JSON; если ошибка в плагине чужой CMS, сперва ищите совместимое обновление производителя.

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

Для массивов проверяйте ключ: $name = $_POST['name'] ?? ''; (оператор объединения с null, PHP 7+) или isset($arr['key'])/array_key_exists('key', $arr). Для переменных задавайте значение до условий и циклов: $total = 0;. Частая причина — переменная создаётся только внутри if, а используется снаружи; а также опечатка в имени ($user и $users).

#Если ошибка в чужом коде (CMS, плагин, тема)

Обновите плагин/тему до последней версии: разработчики исправляют такие предупреждения при поддержке PHP 8. Если обновления нет, а нужно срочно убрать вывод, отключите показ ошибок на продакшене в php.ini: display_errors = Off, log_errors = On, error_log = /var/log/php_errors.log. В WordPress: define('WP_DEBUG_DISPLAY', false); и define('WP_DEBUG_LOG', true); в wp-config.php.

#Поиск проблемных мест

Включите логирование и найдите строки: grep "Undefined" /var/log/php_errors.log | sort | uniq -c | sort -rn | head. Статическая проверка: PHPStan (composer require --dev phpstan/phpstan, затем vendor/bin/phpstan analyse src) находит неопределённые переменные заранее. Проверьте версию PHP командой php -v.

#Чего не делать

Не подавляйте ошибки оператором @ повсюду: он скрывает реальные проблемы и замедляет код. Не снижайте error_reporting ради маскировки на разработке — исправляйте причину. Различайте Warning (код отработает) и Fatal error (выполнение остановлено).

Linux · Терминал (Bash)Команда
Версия PHP, самые частые предупреждения из лога и статический анализ кода.
php -v
grep "Undefined" /var/log/php_errors.log | sort | uniq -c | sort -rn | head
composer require --dev phpstan/phpstan && vendor/bin/phpstan analyse src

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 1 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.