W3docs

PHP Superglobals

PHP bietet spezielle Variablen, die in allen Geltungsbereichen verfügbar sind – sogenannte Superglobals. Erfahren Sie, wie Sie sie sicher einsetzen.

PHP Superglobals

Superglobals sind eingebaute PHP-Variablen, die immer und in jedem Geltungsbereich verfügbar sind, ohne dass eine Deklaration erforderlich ist. Anders als gewöhnliche Variablen müssen Sie nicht global $var; schreiben, um sie innerhalb einer Funktion zu verwenden — sie sind überall automatisch sichtbar. Sie bilden die Brücke zwischen der Außenwelt (dem Browser, dem Webserver, dem Betriebssystem) und Ihrem PHP-Skript: Eingehende Formulardaten, Cookies, Session-Zustände und Anfrage-Metadaten gelangen alle über Superglobals in Ihr Skript.

Dieses Kapitel beschreibt, was jede Superglobal enthält, wann Sie sie verwenden sollten und welche Sicherheitsfallen Einsteiger am häufigsten tappen.

Was sind PHP Superglobals?

Eine Superglobal ist ein vordefiniertes assoziatives Array, das PHP vor dem Ausführen Ihres Skripts für Sie befüllt. Es gibt neun Superglobals:

SuperglobalEnthältTypischer Einsatz
$_GETQuery-String-Parameter (?key=value)Suche, Paginierung, Filter
$_POSTFormularfelder, die im Request-Body gesendet werdenLogin, Registrierung, Dateneingabe
$_REQUESTZusammenführung von $_GET, $_POST und $_COOKIEVereinfachter Zugriff (mit Vorsicht nutzen)
$_FILESDateien, die über ein Multipart-Formular hochgeladen wurdenDatei- und Bild-Uploads
$_COOKIECookies, die der Browser gesendet hat„Angemeldet bleiben", Einstellungen
$_SESSIONBenutzerspezifische Daten, die auf dem Server gespeichert sindLogin-Status, Warenkörbe
$_SERVERServer- und Anfrageinformationen (Header, Pfade)Routing, Erkennen der HTTP-Methode
$_ENVUmgebungsvariablenKonfiguration, Secrets, API Keys
$GLOBALSAlle Variablen im globalen GeltungsbereichZugriff auf globale Variablen innerhalb einer Funktion

Da es sich um Arrays handelt, lesen Sie einen Wert per Schlüssel — zum Beispiel $_GET['name'] — und können das gesamte Array mit print_r() oder var_dump() beim Debuggen inspizieren.

Sicherheit zuerst. Alles in $_GET, $_POST, $_REQUEST, $_COOKIE und $_FILES stammt vom Benutzer und muss als nicht vertrauenswürdig behandelt werden. Prüfen Sie immer, ob ein Schlüssel existiert, und validieren und escapen Sie ihn vor der Verwendung. Wenn Sie das auslassen, öffnen Sie Tür und Tor für XSS, SQL-Injection und fehlerhafte Logik.

$_GET

$_GET erfasst Parameter aus dem URL-Query-String. Für die URL example.com/?name=John&page=2 befüllt PHP $_GET wie folgt:

// URL: example.com/?name=John&page=2
$_GET = ['name' => 'John', 'page' => '2'];

$name = $_GET['name'] ?? 'guest';   // 'John'
$page = (int) ($_GET['page'] ?? 1); // 2
echo "Hello, $name — viewing page $page";

Verwenden Sie $_GET für Daten, die sicher in der URL sichtbar sein können und die als Lesezeichen gespeichert oder geteilt werden können: Suchbegriffe, Seitenzahlen, Sortierungen. Beachten Sie den ??-Operator (Null-Koaleszenz) — er liefert einen Fallback-Wert, damit fehlende Schlüssel keine Warnung „undefined array key" auslösen. Setzen Sie niemals Passwörter oder sensible Daten in $_GET, da die URL protokolliert, gecacht und in der Adressleiste sichtbar ist.

$_POST

$_POST erfasst Daten, die im HTTP-Request-Body gesendet werden, typischerweise von einem Formular mit method="post". Die Werte werden nicht in der URL angezeigt, was $_POST zur richtigen Wahl für Login-Formulare und alle Aktionen macht, die Daten verändern.

// <form method="post"><input name="email"> ... </form>
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $email = trim($_POST['email'] ?? '');
    if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
        echo "Stored: $email";
    } else {
        echo "Please enter a valid email address.";
    }
}

Sowohl $_GET als auch $_POST sind zentral für die Arbeit mit Formularen — siehe PHP-Formularverarbeitung und PHP-Formularvalidierung für vollständige, validierte Beispiele.

$_REQUEST

$_REQUEST ist ein praktisches Array, das $_GET, $_POST und $_COOKIE zusammenführt. Es erlaubt Ihnen, einen Wert unabhängig davon zu lesen, wie er gesendet wurde:

$id = $_REQUEST['id'] ?? null;

Verwenden Sie es sparsam. Da die Reihenfolge, in der die drei Quellen sich gegenseitig überschreiben, durch die Einstellung request_order in php.ini gesteuert wird, könnte ein Cookie unbemerkt ein POST-Feld überdecken. Für vorhersehbaren, sicheren Code bevorzugen Sie die spezifische Superglobal ($_GET oder $_POST), die Sie tatsächlich erwarten.

$_FILES

$_FILES enthält Metadaten zu Dateien, die über ein Formular mit enctype="multipart/form-data" hochgeladen wurden. Für ein Eingabefeld namens avatar erhalten Sie ein Array mit dem ursprünglichen Namen, dem MIME-Typ, dem temporären Pfad, dem Fehlercode und der Größe:

// <form method="post" enctype="multipart/form-data">
//   <input type="file" name="avatar">
// </form>
if (isset($_FILES['avatar']) && $_FILES['avatar']['error'] === UPLOAD_ERR_OK) {
    $tmp  = $_FILES['avatar']['tmp_name'];
    $name = basename($_FILES['avatar']['name']);
    move_uploaded_file($tmp, __DIR__ . "/uploads/$name");
    echo "Uploaded $name";
}

Prüfen Sie immer den error-Schlüssel und validieren Sie Dateityp und -größe, bevor Sie move_uploaded_file() aufrufen — vertrauen Sie niemals dem vom Client gelieferten name oder type.

$_COOKIE enthält die Cookies, die der Browser mit der Anfrage gesendet hat. Ein Cookie ist ein kleines Datenstück, das im Browser gespeichert wird und bei jeder nachfolgenden Anfrage zurückgeschickt wird — nützlich zum Speichern von Einstellungen oder eines „Angemeldet bleiben"-Tokens.

// Cookies are set with setcookie(), then read on the NEXT request:
setcookie('theme', 'dark', time() + 86400); // expires in 1 day

$theme = $_COOKIE['theme'] ?? 'light';
echo "Current theme: $theme";

Ein Cookie, das Sie mit setcookie() setzen, ist in $_COOKIE erst ab der nächsten Anfrage verfügbar, da es zuerst zum Browser geschickt wird und danach zurückkommt. Den vollständigen Lebenszyklus finden Sie unter PHP Cookies.

$_SESSION

$_SESSION speichert benutzerspezifische Daten auf dem Server, identifiziert durch eine Session-ID, die in einem Cookie übermittelt wird. Da die Daten auf dem Server liegen, ist das für sensible Zustände wie „ist dieser Benutzer eingeloggt" sicherer als ein Cookie.

Sie müssen session_start() aufrufen, bevor Sie $_SESSION lesen oder schreiben:

session_start();

$_SESSION['user_id'] = 42;        // write
$id = $_SESSION['user_id'] ?? 0;  // read on any page
echo "Logged-in user: $id";

Siehe PHP Sessions für ein vollständiges Login-Beispiel und Details zur Session-Lebensdauer.

$_SERVER

$_SERVER wird vom Webserver mit Informationen über die Anfrage und die Umgebung befüllt. Häufige Schlüssel:

$method = $_SERVER['REQUEST_METHOD']; // 'GET' or 'POST'
$host   = $_SERVER['HTTP_HOST'];      // 'www.example.com'
$uri    = $_SERVER['REQUEST_URI'];    // '/products?id=5'
$ip     = $_SERVER['REMOTE_ADDR'];    // visitor's IP address

if ($method === 'POST') {
    echo "Handling a form submission from $ip";
}

$_SERVER['REQUEST_METHOD'] ist die Standardmethode, um festzustellen, ob eine Seite normal geladen wurde (GET) oder ein Formular abgesendet wurde (POST).

$_ENV und $GLOBALS

$_ENV gibt die Umgebungsvariablen des Betriebssystems preis, wo moderne Anwendungen Konfiguration und Secrets ablegen, damit diese nicht im Quellcode landen:

$dbHost = $_ENV['DB_HOST'] ?? 'localhost';
$apiKey = getenv('API_KEY'); // getenv() also reads the environment

$GLOBALS ist ein Array aller Variablen, die im globalen Geltungsbereich definiert sind. Es ermöglicht einer Funktion, auf eine globale Variable zuzugreifen, ohne das Schlüsselwort global zu verwenden:

$counter = 10;

function increment() {
    $GLOBALS['counter']++; // modifies the global $counter
}
increment();
echo $counter; // 11

$GLOBALS ist selten das richtige Werkzeug — es ist sauberer, Daten als Funktionsargumente zu übergeben. Um zu verstehen, warum, lesen Sie PHP Variable Scope.

Fazit

PHP Superglobals sind der Standardweg, um Eingaben und Anfrageinformationen in einer PHP-Webanwendung zu lesen. Verwenden Sie $_GET für URL-Parameter, $_POST für Formularübermittlungen, $_FILES für Uploads, $_COOKIE und $_SESSION für benutzerspezifische Zustände sowie $_SERVER/$_ENV für Anfrage- und Umgebungsdetails. Die eine Regel, die für alle gilt: Daten, die vom Browser stammen, sind nicht vertrauenswürdig — validieren und escapen Sie sie jedes Mal. Fahren Sie von hier aus mit PHP-Formularvalidierung fort, um diese Superglobals in einem echten, sicheren Formular in Aktion zu sehen.

Übungen

Übung
Welche der folgenden Variablen sind Superglobals in PHP?
Welche der folgenden Variablen sind Superglobals in PHP?
Was this page helpful?