Tach!
if (isset($_SERVER['HTTP_REFERER']) && ($_SERVER!= "")){ echo "Hallo"; }
Wir da jetzt geprüft, ob die Variable $_SERVER['HTTP_REFERER' leer ist?
Was isset() macht, steht im Handbuch.
Der Vergleich $_SERVER!= ""
ist erstmal unsinnig, solange $_SERVER nicht per Hand geändert wurde. Ansonsten ist $_SERVER ein Array und ein Vergleich mit einem String ergibt erstmal keinen Sinn. Um ein Array mit einem String zu vergleichen, konvertiert PHP das Array in einem String. Dabei kommt aber der String "Array" raus, und der ist kein Leerstring. Der Vergleich ergibt im Falle eines Arrays also immer true. Wäre $_SERVER allerdings nicht vorhanden, würde ein Zugriff darauf einen Fehler vom Typ Notice erzeugen. PHP macht bei solchen Fehlern weiter und gibt NULL als Wert für $_SERVER zurück. Der Vergleich von Leerstring mit NULL ergibt true, im vorliegenden Fall negiert, also false. Nun ist $_SERVER aber im Normalfall immer vorhanden und ein Array, solange man es nicht händisch beeinflusst hat oder es per Konfiguration ausgeschaltet wurde. Beides macht man im Normalfall nicht.
Und nur, wenn sie nicht leer ist, wird "Hallo" ausgegeben?
So ist wohl der Plan.
Und wenn ja, was genau macht denn dieses && in dem Code?
Die Funktion des Operators steht auch im PHP-Handbuch.
Im vorliegenden Fall ist der zweite Vergleich und damit die logische Und-Verknüpfung überflüssig. Wenn $_SERVER['HTTP_REFERER']
vorhanden ist, ist auch $_SERVER
vorhanden und ein Array. Wenn es nicht vorhanden ist, ist der erste Teil false und weitere Vergleiche mit &&
verknüpft können das Ergbnis nicht mehr ändern. PHP wertet, wie viele andere Programmiersprachen, den Rest des Ausdruckes nicht mehr aus. Den Teil ab dem &&
kann man sich also in jedem Fall sparen.
dedlfix.