FATAL ERROR syntax error, unexpected T_STRING

Chybová zpráva Unexpected T_STRING v PHP označuje stav, kdy bylo přerušeno zpracovávání skriptu, protože zápis kódu obsahuje chybu. Ve většině případů se jedná o syntaktickou chybu anebo překlep. Opravit tento druh chyby většinou bývá jednoduché.

Přebývající uvozovky v řetězci #

Mezi nejčastější případy této chyby jsou přebývající úvozový a to ať jednoduché anebo zdvojené .

Například tento kód, obsahuje chybně uvozovky.

echo "<a href="https://www.flyer.cz">Odkaz na super web</a>";

To způsobí následující chybu:

FATAL ERROR syntax error, unexpected 'https' (T_STRING), expecting ';' or ',' on line number 1

Uvozovky nemůžete dát takto dovnitř zápisu. Je nutné je escapovat pomocí zpětného lomítka \”.

echo "<a href=\"https://www.flyer.cz\">Odkaz na super web</a>";

Tento druh chyb nejlépe odhalíte používáním editoru, který barevně odlišuje kód. Osobně mám dobré zkušenosti s PSPad a v posledním roce hodně používám i Visual Studio Code

Neukončený řetězec #

Řetězec musí začínat a končit stejnými uvozovkami. Pokud na ně zapomenete, tak se objeví právě chyba Unexpected T_STRING.

Ukázka chybného zápisu:

echo "Ahoj <br>;
echo "světě <br>";

Dočkáme se následující chybové hlášky:

FATAL ERROR syntax error, unexpected 'světě' (T_STRING), expecting ';' or ',' on line number 2

Jak je vidět chybová hláška v tomto případě odkazuje na řádek 2, protože tam se provádění skriptu zastavilo. Chyba se však nachází na řádku 1, kde chybí dvojité uvozovky. Je třeba si na to dávat pozor.

Špatné uvozovky #

V PHP se používají pouze dva druhy uvozovek a to ‘ a “. Pokud použijete jiné, tak se objeví chyba Unexpected T_STRING. To se nejčastěji stává při kopírování kódů z nějakých stránek. Spousta CMS používá automatické (pře)formátování textu, kde mohou být programátorské uvozovky nahrazené nějakými, které se lépe čtou (takzvané typografické uvozovky).

Chybějící středník #

Pokud s PHP začínáte a nemáte zkušenosti s jiným obdobným programovacím jazykem, tak chybějící středník je nejčastější chybou. Chce to pár dní, týdnů, let, dekád … no prostě občas na ně zapomene každý 🙂

Příklad chyby:

<?php
$a = 10;
$b = 20
$c = $a + $b;
?>
FATAL ERROR syntax error, unexpected '$c' (T_VARIABLE) on line number 4

Aktivní nastavení short_open_tag v PHP.ini a XML #

Pokud je short_open_tag v PHP.ini zapnutá, tak části kódu <? budou automaticky parsovány jako PHP a to i přesto, že takto například chceme definovat v hlavičce že se jedná o XML soubor.

Příklad:

<?xml version="1.0"?>
FATAL ERROR syntax error, unexpected 'version' (T_STRING) on line number 1

Chyba se objeví protože část za <? se zpracovává jako PHP. Tedy webserver za sebou vidí dvě konstanty xml a version. Netuší k čemu je tam takto máte a vyhodnotí to jako chybu.

Neviditelné znaky #

V Unicode  je řada znaků, které se nezobrazují, ale počítač je potřebuje pro správné fungování. Neviditelný znak může být například nedělitelná mezera (U+200B). Pokud se vám takovýto znak dostane do kódu, například kopírováním kusu textu, tak bývá velice obtížné jej najít.

<?php
    ​echo 'Tento skript nefunguje';
?>
FATAL ERROR syntax error, unexpected ''Tento skript nefunguje'' (T_CONSTANT_ENCAPSED_STRING) on line number 2

A jak se tyto neviditelné znaky dají najít? Pro editory jako Visual Studio Code na to existují doplňky, které je hledají a zobrazují. Další možností je použít hexeditor.

Chybějící $ u proměnné #

Každá proměnná v PHP musí začínat znakem $. Pokud jej zapomenete, tak se stane konstantou anebo jedním z předdefinovaných klíčových slov (and, class, global …)