Signatur
Beschreibung
getenv() ermöglicht den Zugriff auf Umgebungsvariablen, die dem PHP-Prozess zur Verfügung stehen. Typische Anwendungsfälle sind das Lesen von Konfigurationswerten wie Datenbankverbindungen, API-Schlüsseln oder Deployment-Einstellungen, die bewusst außerhalb des Quellcodes verwaltet werden (z. B. über .env-Dateien, Systemumgebung oder Webserver-Konfiguration).
Wird $name weggelassen oder auf null gesetzt, liefert die Funktion ein assoziatives Array mit allen aktuell verfügbaren Umgebungsvariablen – analog zu $_ENV, jedoch immer aktuell aus dem Prozess gelesen.
Der Parameter $local_only (seit PHP 5.5.38 / 5.6.24 / 7.0.9 relevant) schränkt die Suche auf lokal gesetzte Variablen ein und ignoriert dabei Variablen, die vom SAPI (z. B. Apache SetEnv) injiziert wurden. Das ist besonders dann sinnvoll, wenn eine strikte Trennung zwischen system- und webserver-gesetzten Variablen gewünscht ist.
Gegenüber dem Superglobal $_ENV hat getenv() den Vorteil, dass es unabhängig von der variables_order-Einstellung in der php.ini funktioniert und stets den aktuellen Wert aus der Laufzeitumgebung zurückgibt.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $name | string|null | null | Name der Umgebungsvariablen, deren Wert abgerufen werden soll. Wird null übergeben oder der Parameter weggelassen, werden alle Umgebungsvariablen als assoziatives Array zurückgegeben. |
| $local_only | bool | false | Ist dieser Wert true, werden nur lokal (per putenv() oder OS-Umgebung) gesetzte Variablen berücksichtigt. Vom SAPI (z. B. Webserver) gesetzte Variablen werden dann ignoriert. |
Rückgabewert
string zurück, ein assoziatives Array aller Umgebungsvariablen, wenn $name null ist, oder false, wenn die angegebene Variable nicht existiert.Beispiele
Einzelne Umgebungsvariable lesen
<?php
// Beispiel: Datenbankhost aus der Umgebung lesen
$dbHost = getenv('DB_HOST');
if ($dbHost === false) {
echo 'DB_HOST ist nicht gesetzt.';
} else {
echo 'Datenbankhost: ' . $dbHost;
}
// Ausgabe (wenn DB_HOST=localhost gesetzt ist):
// Datenbankhost: localhost
Alle Umgebungsvariablen als Array abrufen
<?php
// Alle Umgebungsvariablen in einem Array erfassen
$env = getenv();
foreach ($env as $key => $value) {
echo $key . ' = ' . $value . PHP_EOL;
}
// Gibt alle verfügbaren Umgebungsvariablen aus, z. B.:
// PATH = /usr/local/bin:/usr/bin:/bin
// HOME = /var/www
// ...
Nur lokal gesetzte Variablen lesen (local_only)
<?php
// Setzt eine Variable lokal und liest sie mit local_only = true
putenv('MEINE_VAR=Hallo');
$wert = getenv('MEINE_VAR', true);
echo $wert; // Hallo
// Eine vom Webserver (SAPI) gesetzte Variable wie REMOTE_ADDR
// wird mit local_only = true NICHT zurückgegeben:
$remoteAddr = getenv('REMOTE_ADDR', true);
var_dump($remoteAddr); // bool(false)
// Wichtig · Fallstricke
Sicherheitshinweis: Umgebungsvariablen können im Kontext von Web-Applikationen durch den Webserver oder Angreifer manipuliert werden (z. B. HTTP-Header-Injection). Vertraue Werten aus Umgebungsvariablen nicht blind – validiere und bereinige sie, bevor sie in SQL-Abfragen, Shell-Befehlen oder Ausgaben verwendet werden.
SAPI-Besonderheit: Im CLI-Modus und unter bestimmten SAPI-Konfigurationen kann getenv() andere Werte liefern als $_ENV, da $_ENV von der variables_order-Direktive in der php.ini abhängt. Ist E dort nicht enthalten, ist $_ENV leer, getenv() funktioniert aber trotzdem.
Thread-Sicherheit: In Multithreading-Umgebungen (z. B. Apache mit Worker-MPM) ist getenv() ohne local_only = true potenziell nicht thread-sicher, da es auf globale Prozessumgebung zugreift. In solchen Szenarien empfiehlt sich der Einsatz von local_only = true in Kombination mit putenv().