Parse error: syntax error, unexpected — что делать
Parse error — PHP не смог прочитать код: в нём нарушены правила языка. Программа при этом не выполняется вовсе, ни одной строки. Сообщение выглядит так:
Parse error: syntax error, unexpected token "echo" in /home/ivan/site/index.php on line 3Читать его надо так: в файле index.php на строке 3 PHP встретил то, чего там быть не должно, — echo. Ищите ошибку на указанной строке и строкой выше: чаще всего ошибка стоит в конце предыдущей строки, а PHP замечает её только на следующем слове.
Частые причины
<?php
$name = "Анна"
echo $name;Здесь пропущена ; после "Анна" на строке 2. PHP читает дальше, видит echo на строке 3 и сообщает unexpected token "echo" — «не ждал здесь echo».
| Что в сообщении | Что обычно случилось |
|---|---|
unexpected token "echo", unexpected variable "$x", unexpected identifier | пропущена ; в конце предыдущей строки |
unexpected end of file или Unclosed '{' on line N | не закрыта фигурная скобка { — PHP дошёл до конца файла |
unexpected token "}" | лишняя закрывающая скобка или пропущена ; перед ней |
unexpected token "else" | ; после if (…) или лишняя } перед else |
unexpected token "=" | у переменной забыт знак $: name = 5 вместо $name = 5 |
unexpected double-quoted string или unexpected single-quoted string | пропущена точка между строками или кавычка внутри строки не экранирована (перед ней нет \) |
Скобки и кавычки
Незакрытая скобка — самая неприятная ошибка: PHP сообщает о ней в конце файла, хотя ошибка может быть в начале. Начиная с PHP 8.0 сообщение подсказывает, где открыта скобка: Unclosed '{' on line 5 — значит, не закрыта скобка, открытая на строке 5.
Помогает редактор кода: в Visual Studio Code и других редакторах парная скобка подсвечивается, когда курсор стоит рядом. Отступы тоже выдают ошибку — если блоки выровнены, лишняя или недостающая } видна сразу.
С кавычками то же: строка, открытая " и не закрытая, «съедает» весь код до следующей кавычки. Кавычку внутри строки экранируют обратной косой чертой: "Он сказал: \"Привет\"", или берут другие кавычки: 'Он сказал: "Привет"'.
Проверка без запуска
php -l index.phpКоманда только проверяет синтаксис файла и ничего не выполняет. Если ошибок нет, она пишет No syntax errors detected in index.php, если есть — то же сообщение Parse error с номером строки. Удобно проверять так файлы перед выкладкой на сервер.
Код для новой версии на старом PHP
Конструкции PHP 8 — match, именованные аргументы f(name: 1), свойства в параметрах конструктора — на PHP 7 дают Parse error, хотя код верный. Если ошибка непонятная, а код взят из свежего учебника, проверьте версию PHP на сервере (справка Как узнать версию PHP).
Если на странице только белый экран
Значит, показ ошибок выключен. Как его включить и почему ini_set в том же файле не поможет именно для Parse error — в справке Как включить вывод ошибок.