#Что означает ошибка
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, «умные» кавычки. | Код скопирован из текста. | Замените кавычки. |
#Пошаговое решение
- Прочитайте сообщениеОткройте точный текст ошибки в журнале PHP или выводе редактора и перепишите имя файла, номер строки и фрагмент
unexpected token. На сервере общего доступа сообщения могут быть скрыты; тогда войдите в панель хостинга → «Журналы ошибок» и воспроизведите сбой. Проверьте, что строка относится к нужному сайту и времени. Номер ошибки часто указывает на место, где парсер обнаружил проблему, а не на пропущенный символ. - Проверьте синтаксисОткройте SSH-терминал или локальный терминал в каталоге копии проекта и выполните
php -l index.php, заменивindex.phpна реальный путь к указанному файлу. Команда ничего не изменяет и показываетNo syntax errors detected, если файл корректен для этой версии PHP, иначе строку с ошибкой. Учтите, чтоphp -vв терминале может отличаться от PHP сайта; при необходимости используйте точный путь к его интерпретатору. - Посмотрите предыдущие строкиОткройте файл в редакторе с нумерацией строк (например, VS Code: «Файл → Открыть файл») и перейдите к указанной строке сочетанием Ctrl+G. Посмотрите 5–10 строк выше: у предыдущей инструкции могли пропасть
;,),]или}. Сначала создайте копию файла или зафиксируйте изменения в системе версий. Исправьте только подтверждённую синтаксическую ошибку и снова запуститеphp -l. - Проверьте парность скобокВ редакторе установите курсор рядом с подозрительной
{,(или[и проследите соответствующую закрывающую скобку по подсветке. Если парность непонятна, временно отформатируйте копию файла встроенной командой редактора, не меняя поведение рабочего сайта. Обратите внимание на массивы, строки и вложенные вызовы. Сохраните изменение и повторите проверку синтаксиса. - Проверьте кавычкиНайдите строку, которую недавно вставляли из документа или мессенджера. В исходном коде PHP кавычки должны быть обычными
"либо одиночными, а не типографскими «ёлочками» и “умными”. Проверьте закрытие строк и экранирование обратной косой черты в конкретном контексте. Меняйте кавычки только внутри кода, не в пользовательском тексте, и снова выполните проверку. - Проверьте версию PHPВ терминале выполните
php -v, а в панели хостинга проверьте выбранную веб-версию PHP для нужного домена. Сравните синтаксисmatch,?->, типизированных свойств и других конструкций с минимальной поддерживаемой версией, указанной разработчиком приложения. Если код рассчитан на более новый PHP, обновляйте среду сначала на тестовой копии; переключение версии может повлиять на другие модули. - Включите показ ошибокНа рабочем сайте не включайте
display_errors = Onради посетителей: это может раскрыть пути и сведения о сервере. Откройте в панели хостинга журнал ошибок PHP или настройте запись в закрытыйerror_log; в тестовом окружении допустим подробный вывод. Воспроизведите ошибку, соберите точный текст и после диагностики верните временные настройки логирования. - Проверьте весь проектЕсли ошибка появляется в нескольких файлах, в терминале тестовой копии из корня проекта выполните
find . -name "*.php" -print0 | xargs -0 -n1 php -lна Linux с установленными утилитами. Проверка может занять время; важна именно версия PHP в команде. Устраняйте ошибки по одной, повторяйте проверку после каждой и только затем переносите исправления на рабочий сайт с возможностью отката. - Команды для отдельных ситуацийВыберите только подходящий вариант. Это не одна последовательность: часть команд диагностирует проблему, а часть меняет настройки или данные.
Сообщение вида unexpected T_STRING указывает на текстовую константу там, где парсер её не ждал (часто нет ; или кавычки); unexpected '}' — лишняя или недостающая скобка выше; unexpected end of file — не закрыт блок. Если ошибка появилась после обновления PHP на хостинге, проверьте устаревшие конструкции и используйте инструмент или для миграции. Для отладки на продакшене не включайте показ ошибок посетителям — смотрите журнал error_log. Справка — .
Для быстрого поиска ошибки полезны редакторы с проверкой синтаксиса: VS Code с расширением PHP Intelephense или PhpStorm подсвечивают проблему до запуска. Если файл создан в Windows, убедитесь, что он сохранён в UTF-8 без BOM: BOM перед <?php вызывает отправку заголовков и странные ошибки. При обновлении PHP 7 до 8 частыми причинами становятся удалённые функции и изменения в синтаксисе (например, строгая типизация и match), поэтому прочитайте .