Hallo Eric,
Link zum Handbuch: String-Interpolation in PHP
Konkreter Fehler: Du verwendest die einfache Syntax (oder basic syntax). Die unterstützt zwar Arrayzugriffe mit String-Keys, aber da diese Syntax uralt ist, basiert sie auf uralter Array-Notation ohne Hochkommas:
Falsch:
... href="/CSSLib/$_SERVER['Lay_e'].css"
Richtig:
... href="/CSSLib/$_SERVER[Lay_e].css"
In den eckigen Klammern darf stehen:
- Ein Name
- Eine Variable (also "foo{$arr[$i]}" ist ok)
- Eine Zahl
Ein Name muss dem Muster [a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]* entsprechen, erlaubt sind im Namen also ASCII-Buchstaben, ASCII-Ziffern (außer am Anfang), ein Unterstrich und die Zeichen mit dem Code 0x80 bis 0xff. Falls Du PHP-Code in UTF-8 speicherst, sollten auch alle Unicode-Zeichen erlaubt sein, weil die in UTF8 als 2 oder mehr Bytes mit Codes von 0x80 bis 0xFF codiert werden.
Alternativ kannst Du auch die erweiterte Interpolationssyntax mit geschweiften Klammern wählen, dann MUSS ein Array-Key in Anführungszeichen stehen:
Auch richtig:
... href="/CSSLib/{$_SERVER['Lay_e']}.css"
Hinweis dazu, warum href="CSSLib/" . $_SERVER['Lay_e'] . ". CSS"> nicht funktioniert: Wenn Du Dich in einem Heredoc-String befindest (also diese <<< Notation), kannst Du nicht eben mal mit dem Punkt-Operator Strings verketten. Der Heredoc-String ist ja nicht beendet, er nimmt den Punkt deshalb als String-Inhalt. Was Du hättest machen können: $_SERVER['Lay_e'] in einer normalen Variablen speichern und diese dann mit normaler String-Interpolation einsetzen.
$language = $_SERVER['Lay_e'];
echo <<<END
<link rel="stylesheet" href="/CSSLib/$language.css">
END;
Die Diskussion darüber, HTML-Code mit ECHO auszugeben, ist mir zwar eigentlich leid, aber ich persönlich finde es ganz schlecht. Moderner Code sieht aus meiner Sicht eher so aus:
function renderPage() {
$foo = 1; // Irgendwelche Initialisierungen
$bar = 2;
?>
<!doctype html>
<html lang="de">
<head>
<title>Demo</title>
...weitere nötige head-Einträge...
<link rel="stylesheet" href="/CSSLib/<?= $_SERVER['Lay_e'] ?>">
<link rel="stylesheet" href="/CSSLib/<?= $_SERVER['Hai_o'] ?>">
<link rel="stylesheet" href="/CSSLib/<?= $_SERVER['Hui_Buh'] ?>">
...und so weiter...
</head>
<body>
<?php renderBody() ?>
</body>
</html>
<?php
} // Ende von render()
Ob man das in Funktionen packt und die Body-Ausgabe in eine weitere Funktion auslagert, ist Geschmackssache und hängt auch von der Komplexität der Seite ab.
Rolf
sumpsi - posui - obstruxi