Aus gesundheitlichen Gründen kann ich diese Seite nicht weiterpflegen, aktualisieren oder euch Support für eure PHP-Probleme anbieten. PHP für dich bleibt aber in seiner aktuellen Form erhalten und funktioniert nach wie vor als Einstieg in die PHP-Welt - gerade, wenn dich technischere Anleitungen bisher immer davon abgehalten haben.
Mehr dazu...

Fehlersuche

Parse error: syntax error, unexpected T_STRING

Ein ganz ähnlich gelagertes Problem betrifft T_STRING. Auch dafür ein ganz einfaches Beispiel:
  1. <?php
  2. echo "Ein einfacher Text';
  3. echo "Noch mehr Text";
  4. ?>
Die Fehlermeldung dazu lautet:
Parse error: syntax error, unexpected T_STRING, expecting ';' in /www/error.php on line 3

In diesem Fall ist es also kein T_ECHO, das Probleme macht, sondern T_STRING. Das wiederum steht für ein Problem mit einem String, also einer Zeichenkette wie eben unser "Ein einfacher Text'.

Wiederum wissen wir, dass das Problem in Zeile 3 auftritt, dieses Mal aber nicht vor dem echo, sondern vor dem String in Zeile 3, das ist also schon weniger einfach zu entdecken. Am Besten, wir arbeiten uns langsam vorwärts - oder vielmehr rückwärts.

Ausgehend vom String in Zeile 3 gehen wir Schritt für Schritt den Code zurück, um den Fehler zu entdecken:
Ist der String in Zeile 3 korrekt, ist er mit Anführungszeichen eingegrenzt, gibt es keine zu escapenden Zeichen, die wir übersehen haben?
Stimmt die Anweisung vor dem String, also in unserem Fall das echo?
Wie sieht es in Zeile 2 aus? Ist ein Semikolon am Zeilenende?
Ist der String in Zeile 2 richtig, hat er korrekte Anführungszeichen und keine zu escapenden Zeichen?

Und schwups, schon ist unser Fehler aufgetaucht. Der String in Zeile 2 wird mit doppelten Anführungszeichen eingeleitet, hat aber als Abschluss lediglich ein einfaches Anführungszeichen. PHP kann das nicht als Paar erkennen und denkt daher, dass wir den String an der Stelle noch gar nicht beenden wollten. Für PHP endet der String also erst am nächsten doppelten Anführungszeichen; dem vor Noch mehr Text" und dementsprechend kann es mit dem Text/String danach nichts mehr anfangen, womit auch die Fehlermeldung mit dem T_STRING Sinn macht.

Eine kleine Korrektur und schon funktioniert wieder alles:
  1. <?php
  2. echo "Ein einfacher Text";
  3. echo "Noch mehr Text";
  4. ?>
Ein ganz ähnliches Problem tritt auch auf, wenn wir vergessen, Anführungszeichen zu maskieren/escapen:
  1. <?php
  2. echo "<a href="error.php\">Error-Seite</a>";
  3. echo "Noch mehr Text";
  4. ?>
Anstatt einen Link zur gewünschten Seite, bekommen wir auch hier nur eine Fehlermeldung präsentiert:
Parse error: syntax error, unexpected T_STRING, expecting ';' in /www/error.php on line 2
Jetzt findet PHP den Fehler bereits in Zeile 2. Unser Vorgehen ist wie beim letzten Mal. Wir schauen uns zuerst den String in Zeile 2 an und überprüfen, ob alle Anführungszeichen korrekt sind und alles richtig escaped wurde.

Auch in diesem Fall stoßen wir recht rasch auf den Fehler: Nur eines der beiden Anführungszeichen innerhalb des auszugebenden Textes wurde mit einem Backslash escaped. Das zweite Anführungszeichen steht einfach so herum und gaukelt PHP vor, dass der String an dieser Stelle schon beendet ist. Also rasch einen zweiten Backslash gesetzt und schon ist alles wieder gut:
  1. <?php
  2. echo "<a href=\"error.php\">Error-Seite</a>";
  3. echo "Noch mehr Text";
  4. ?>
Vergisst man hier übrigens, das zweite Anführungszeichen zu maskieren, kommt es zu einer ganz anderen Fehlermeldung, nämlich zu Parse error: syntax error, unexpected '<' in /www/error.php on line 2. Das wiederum liegt dann daran, dass PHP alles nach dem Anführungszeichen nicht mehr über echo ausgibt, sondern versucht, Code darin zu erkennen. Mit einem > kann PHP noch etwas anfangen, auch dass danach Text steht ist in Ordnung, aber ein < hat dann an der Stelle für PHP nichts mehr verloren und so taucht trotz des gleichen Problems diese ganz andere Fehlermeldung auf.

Autor: Claudia Unkelbach


Spenden via PayPal
© 2001 - 2024 Claudia Unkelbach
Gießener Straße 75, 35396 Gießen