echo $begrüßung;
if($_SESSION['lang'] && $_SESSION['lang']!="") $lang = $_SESSION['lang']; else $lang = 'en';
PHP ist nicht Javascript. Man prüft das Vorhandensein einer Variablen mit isset(). Der Grund, warum deine Version nicht richtig ist, wird dir bei einem auf E_ALL gestellten error_reporting angezeigt. Wenn man (auch noch) auf "leer" testen möchte, kann man (stattdessen gleich) empty() nehmen.
Statt einer zweiten Variablen $lang hätte ich den Defaultwert 'en' bei Nicht-Vorhandensein der Session-Variablen gleich in ihr notiert und sie im weiteren Verlauf verwendet.
include_once('include/lang/'.$lang.'.php');
Zend schreibt mir da aber folgende Wanrung:
Multiple annotations found at this line:
- include-var : Unsafe use of variable in call include()/require()
Prinzipiell kann das Verwenden einer Variablen zum Bilden des Namens einer zu inkludierenden Datei eine Sicherheitslücke sein. Das muss aber nicht. Eine Prüfroutine kann nicht in jedem Fall fehlerfrei entscheiden, ob das der Fall ist oder ob nicht. Den Hinweis auf die Gefahr wegzulassen wäre auch nicht richtig. In dem Fall wirst du die Nachricht ignorieren können. Du solltest aber prüfen, ob $_SESSION['lang'] nicht an anderer Stelle ungewollt gesetzt werden kann. Das könnte durchaus auch in anderen Scripten passieren, denn eine Session ist ja übergreifend.
- Unresolved include 'include/lang/'r_variable;$lang'.php' for projects [name]
Ich vermute, dass hier die Prüfroutine nicht zweifelsfrei eine Initialisierung der Variablen $lang erkennen kann.
Wie kann ich das lösen?
Vermutlich durch Deaktivieren oder Ignorieren der beiden Hinweise. Eine kurze Google-Suche ergab keine zielführende Antwort, was du sicher schon selbst festgestellt hast. Ich vermag auch keine zu geben, weil ich die Situation mit meinem "Zend" [*] nicht nachstellen kann.
[*] Die Firma Zend hat mehrere Produkte entwickelt. In meinem Fall ist es konkret das Zend Studio 5.5.0
echo "$verabschiedung $name";