Was ist der Unterschied zwischen getenv()
und$_ENV
?
Irgendwelche Kompromisse zwischen der Verwendung von beidem?
Mir ist aufgefallen, dass ich manchmal getenv()
das bekomme, was ich brauche, während ich $_ENV
es nicht tue (wie HOME
).
Was ist der Unterschied zwischen getenv()
und$_ENV
?
Irgendwelche Kompromisse zwischen der Verwendung von beidem?
Mir ist aufgefallen, dass ich manchmal getenv()
das bekomme, was ich brauche, während ich $_ENV
es nicht tue (wie HOME
).
$_ENV
und$_SERVER
werden mit Daten gefüllt, die auf verschiedene Weise erhalten wurden.getenv()
ist eine weitere Möglichkeit, auf Daten zuzugreifen, auf die Sie mit PHP nicht direkt zugreifen können. Es funktioniert auch mitvariables_order = "G"
, wenn$_SERVER
und$_ENV
leer sind. Lesen Sie die großartige Antwort von Conor McDermottroe .Antworten:
Laut der PHP-Dokumentation zu getenv sind sie genau gleich, außer dass
getenv
die Variable ohne Berücksichtigung der Groß- und Kleinschreibung gesucht wird. Meistens spielt es wahrscheinlich keine Rolle, aber einer der Kommentare in der Dokumentation erklärt:Aus diesem Grund würde ich mich wahrscheinlich für die Verwendung entscheiden, es
getenv
sei denn, Sie sind sich sicher, dass der Titel der Variablen, die Sie abrufen möchten, in Groß- und Kleinschreibung geschrieben ist.quelle
getenv()
Vorteil: Sie müssenisset
/empty
vor dem Zugriff nicht überprüfen .getenv()
wird keine Mitteilungen ausgeben.Ich weiß, dass der Kommentar in den Dokumenten besagt, dass
getenv
die Groß- und Kleinschreibung nicht berücksichtigt wird, aber das ist nicht das Verhalten, das ich sehe:Wenn Sie sich den Quellcode für die
getenv
Funktion ansehen, gibt es drei Möglichkeiten, wie PHP die Umgebungsvariable abrufen kann:sapi_getenv
(z. B. wenn die Umgebungsvariable von Apache abgerufen wird)GetEnvironmentVariableA
.getenv
vonlibc
.Soweit ich das beurteilen kann, verhält sich Windows nur dann ohne Berücksichtigung der Groß- und Kleinschreibung, da sich die Windows-API für Umgebungsvariablen so verhält. Wenn Sie unter Linux, BSD, Mac usw. arbeiten,
getenv
wird immer noch zwischen Groß- und Kleinschreibung unterschieden.Wie von Mario erwähnt ,
$_ENV
wird es aufgrund unterschiedlicher Konfigurationen nicht immer ausgefüllt.variables_order
Vermeiden$_ENV
Sie es daher, wenn Sie die Serverkonfiguration nicht steuern.Also, für den portabelsten PHP-Code:
getenv
.quelle
Darüber hinaus
$_ENV
ist in der Regel leer, wennvariables_order
nichtE
aufgeführt. Bei vielen Setups ist es wahrscheinlich, dass nur diese$_SERVER
ausgefüllt sind und$_ENV
ausschließlich für die CLI-Verwendung bestimmt sind.Zum anderen wird
getenv()
direkt auf die Umgebung zugegriffen.(In Bezug auf die Fallmehrdeutigkeit könnte man einfacher verwenden
array_change_key_case()
.)quelle
Ich fand es
getenv()
nützlich, einen seltsamen PHP-Fehler zu vermeiden, bei dem manchmal$_SERVER
und$_ENV
undefiniert, wenn erauto_globals_jit
aktiviert war (Erstellen der Variablen _SERVER und _ENV , wenn sie zum ersten Mal verwendet werden). Seitdem habe ich angefangen, es zu benutzen.quelle
Entnommen aus den PHP-Dokumenten :
quelle
Ich würde hinzufügen, dass getenv () eine bessere Wahl ist, da es als Funktion zu Testzwecken überladen werden kann. Während das Überschreiben Ihrer $ _SERVER- oder $ _ENV-Variablen möglicherweise Testframeworks und andere Bibliotheken beeinträchtigt und letztendlich viel mehr Arbeit erfordert, um sicher ausgeführt zu werden.
quelle