Variablen aus externen Quellen
HTTP-Cookies
PHP unterstützt HTTP-Cookies auf völlig transparente Weise, wie in
» RFC 6265 definiert. Cookies sind
ein Mechanismus zur Speicherung von Daten auf dem Client-Rechner, um
damit wiederkehrende Benutzer nachzuverfolgen oder zu identifizieren. Mit
der Funktion setcookie() ist es möglich, Cookies zu
erzeugen. Cookies sind Teil des HTTP-Headers, deshalb muss die Funktion
setcookie() aufgerufen werden, bevor irgendeine Ausgabe
an den Browser gesendet wird. Dabei handelt es sich um die gleiche
Einschränkung, die auch für die Funktion header() gilt.
Cookie-Daten stehen dann in den entsprechenden Cookie-Daten-Arrays, zum
Beispiel $_COOKIE, sowie in
$_REQUEST zur Verfügung. Weitere Details und Beispiele
sind auf der Seite setcookie() des Handbuchs zu finden.
Hinweis:
Aus Sicherheitsgründen werden ab PHP 7.2.34, 7.3.23 bzw. 7.4.11 die
Namen der eingehenden Cookies nicht mehr
URL-dekodiert.
Wenn einer einzelnen Cookie-Variablen mehrere Werte zugewiesen werden
sollen, müssen diese als Array zugewiesen werden. Zum Beispiel:
Dadurch werden zwei einzelne Cookies erzeugt, obwohl
MyCookie im Skript nun ein einziges Array ist. Wenn nur
ein Cookie mit mehreren Werten gesetzt werden soll, empfiehlt es sich,
zuerst serialize() oder explode()
auf das Array anzuwenden.
Es ist zu bedenken, dass ein Cookie ein vorhergehendes Cookie gleichen
Namens im Browser überschreibt, es sei denn, der Pfad oder die Domain sind
anders. Für eine Warenkorb-Anwendung kann somit z. B. ein Zähler mitgeführt
und weitergegeben werden:
Beispiel #4 Ein setcookie()-Beispiel
<?php
if (isset($_COOKIE['zaehler'])) {
$count = $_COOKIE['zaehler'] + 1;
} else {
$count = 1;
}
setcookie('zaehler', $count, time()+3600);
setcookie("Cart[$count]", $item, time()+3600);
?>
Punkte in eingehenden Variablennamen
Normalerweise verändert PHP die Variablennamen nicht, wenn sie einem
Skript übergeben werden. Es sollte aber beachtet werden, dass der Punkt
(".") kein gültiger Bestandteil eines Variablennamens ist. Deshalb achten
Sie auf folgendes:
<?php
$varname.ext; /* ungültiger Variablenname */
?>
Der PHP-Parser sieht eine Variable namens
$varname,
gefolgt von einem Zeichenketten-Verbindungsoperator, dieser wiederum
gefolgt von der offenen Zeichenkette 'ext' (also nicht eingegrenzt durch
'"' und auch keinem Schlüsselwort oder reserviertem Bezeichner
entsprechend). Das kann natürlich nicht zum gewünschten Ergebnis führen.
Deshalb ist es wichtig zu wissen, dass PHP in den ihm übergebenen
Variablen alle Punkte (.) automatisch durch einen Unterstrich (_)
ersetzt.
Bestimmung des Variablen-Typs
Da PHP den Typ der Variablen bestimmt und (im Allgemeinen) selbst eine
entsprechende Umformung vornimmt, ist es nicht immer klar, welchen Typ
eine Variable gerade hat. PHP beinhaltet einige Funktionen, die dies
herausfinden, wie zum Beispiel: gettype(),
is_array(), is_float(),
is_int(), is_object() und
is_string(). Lesen Sie bitte auch das Kapitel über
Typen.
Da HTTP ein Text-Protokoll ist, werden die meisten, wenn nicht alle
Inhalte von
superglobalen Arrays,
wie $_POST und $_GET, als
Zeichenketten erhalten bleiben. PHP wird nicht versuchen, die Werte in
spezifische Typen umzuwandeln. Im Beispiel weiter unten enthält
$_GET["var1"] die Zeichenkette "null" und
$_GET["var2"] die Zeichenkette "123".
/index.php?var1=null&var2=123