PHP LinuxWindows

PHP: Parse error: syntax error, unexpected token

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

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

PHP Parse error: syntax error означает синтаксическую ошибку в коде: пропущены точка с запятой, скобка или кавычка. Найдите строку из сообщения, проверьте код командой php -l, включите отображение ошибок и проверьте версию PHP.

В этой статье
  1. Что означает ошибка
  2. Причины и решения
  3. Пошаговое решение

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

Сообщение
PHP Parse error: syntax error, unexpected token

PHP Parse error: syntax error, unexpected ... означает, что интерпретатор не смог разобрать файл, поэтому не выполнил ни одной строки. Номер строки в сообщении указывает, где парсер понял, что что-то не так, но сама ошибка обычно на строку выше: пропущенная ;, незакрытая скобка, кавычка или }. Ещё одна частая причина — код, использующий возможности более новой версии PHP, чем установлена.

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

Возможная причинаКак узнатьЧто делать
Пропущен символНет ;, ) или }; незакрытая кавычка.Ошибка указывает на следующую строку.Проверьте предыдущую строку.
Несовместимая версия PHPКод написан для PHP 8, сервер на 7.x.unexpected '?', unexpected 'match'.Обновите PHP или измените код.
Короткие теги<? вместо <?php.Ошибка в старом коде.Используйте <?php.
Повреждённая вставкаЛишние символы, BOM, «умные» кавычки.Код скопирован из текста.Замените кавычки.

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

  1. Прочитайте сообщениеОткройте точный текст ошибки в журнале PHP или выводе редактора и перепишите имя файла, номер строки и фрагмент unexpected token. На сервере общего доступа сообщения могут быть скрыты; тогда войдите в панель хостинга → «Журналы ошибок» и воспроизведите сбой. Проверьте, что строка относится к нужному сайту и времени. Номер ошибки часто указывает на место, где парсер обнаружил проблему, а не на пропущенный символ.
  2. Проверьте синтаксисОткройте SSH-терминал или локальный терминал в каталоге копии проекта и выполните php -l index.php, заменив index.php на реальный путь к указанному файлу. Команда ничего не изменяет и показывает No syntax errors detected, если файл корректен для этой версии PHP, иначе строку с ошибкой. Учтите, что php -v в терминале может отличаться от PHP сайта; при необходимости используйте точный путь к его интерпретатору.
  3. Посмотрите предыдущие строкиОткройте файл в редакторе с нумерацией строк (например, VS Code: «Файл → Открыть файл») и перейдите к указанной строке сочетанием Ctrl+G. Посмотрите 5–10 строк выше: у предыдущей инструкции могли пропасть ;, ), ] или }. Сначала создайте копию файла или зафиксируйте изменения в системе версий. Исправьте только подтверждённую синтаксическую ошибку и снова запустите php -l.
  4. Проверьте парность скобокВ редакторе установите курсор рядом с подозрительной {, ( или [ и проследите соответствующую закрывающую скобку по подсветке. Если парность непонятна, временно отформатируйте копию файла встроенной командой редактора, не меняя поведение рабочего сайта. Обратите внимание на массивы, строки и вложенные вызовы. Сохраните изменение и повторите проверку синтаксиса.
  5. Проверьте кавычкиНайдите строку, которую недавно вставляли из документа или мессенджера. В исходном коде PHP кавычки должны быть обычными " либо одиночными, а не типографскими «ёлочками» и “умными”. Проверьте закрытие строк и экранирование обратной косой черты в конкретном контексте. Меняйте кавычки только внутри кода, не в пользовательском тексте, и снова выполните проверку.
  6. Проверьте версию PHPВ терминале выполните php -v, а в панели хостинга проверьте выбранную веб-версию PHP для нужного домена. Сравните синтаксис match, ?->, типизированных свойств и других конструкций с минимальной поддерживаемой версией, указанной разработчиком приложения. Если код рассчитан на более новый PHP, обновляйте среду сначала на тестовой копии; переключение версии может повлиять на другие модули.
  7. Включите показ ошибокНа рабочем сайте не включайте display_errors = On ради посетителей: это может раскрыть пути и сведения о сервере. Откройте в панели хостинга журнал ошибок PHP или настройте запись в закрытый error_log; в тестовом окружении допустим подробный вывод. Воспроизведите ошибку, соберите точный текст и после диагностики верните временные настройки логирования.
  8. Проверьте весь проектЕсли ошибка появляется в нескольких файлах, в терминале тестовой копии из корня проекта выполните find . -name "*.php" -print0 | xargs -0 -n1 php -l на Linux с установленными утилитами. Проверка может занять время; важна именно версия PHP в команде. Устраняйте ошибки по одной, повторяйте проверку после каждой и только затем переносите исправления на рабочий сайт с возможностью отката.
  9. Команды для отдельных ситуацийВыберите только подходящий вариант. Это не одна последовательность: часть команд диагностирует проблему, а часть меняет настройки или данные.
    Выберите подходящий вариант — это не команды для последовательного выполнения
    Вариант 1Проверка синтаксиса одного файла и всех файлов проекта.
    Linux · Терминал (Bash)Команда
    Проверка синтаксиса одного файла и всех файлов проекта.
    php -v
    php -l index.php
    find . -name "*.php" -print0 | xargs -0 -n1 php -l | grep -v "No syntax errors"
    Вариант 2Типичная ошибка: пропущенная точка с запятой.
    PHP
    Типичная ошибка: пропущенная точка с запятой.
    <?php
    $name = "Анна"      // ← ошибка: нет точки с запятой
    echo "Привет, $name";   // парсер сообщит об этой строке

Сообщение вида unexpected T_STRING указывает на текстовую константу там, где парсер её не ждал (часто нет ; или кавычки); unexpected '}' — лишняя или недостающая скобка выше; unexpected end of file — не закрыт блок. Если ошибка появилась после обновления PHP на хостинге, проверьте устаревшие конструкции и используйте инструмент PHP_CodeSniffer или Rector для миграции. Для отладки на продакшене не включайте показ ошибок посетителям — смотрите журнал error_log. Справка — php.net.

Для быстрого поиска ошибки полезны редакторы с проверкой синтаксиса: VS Code с расширением PHP Intelephense или PhpStorm подсвечивают проблему до запуска. Если файл создан в Windows, убедитесь, что он сохранён в UTF-8 без BOM: BOM перед <?php вызывает отправку заголовков и странные ошибки. При обновлении PHP 7 до 8 частыми причинами становятся удалённые функции и изменения в синтаксисе (например, строгая типизация и match), поэтому прочитайте руководство по миграции.

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

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

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