Der Grund ist folgender:
Die Umgebungswerte erhalten Sie von getenv()[PHP]
(die PHP-Funktion) unterscheiden sich von der Umgebung, die Sie mit getenv()[C]
abfragen (die Clib-Funktion). Was getenv()[PHP]
tut, prüft mit dem registrierten sapi auf eine Übereinstimmung (http ://lxr.php.net/xref/PHP_5_6/ext/standard/basic_functions.c#3999
).
Das Apache2-Sapi tut dies über seinen eigenen Umgebungskontext (http://lxr.php.net/xref/PHP_5_6/sapi/apache2handler/sapi_apache2.c#253 ), nicht die Standard-Betriebssystemumgebung aus dem Apache-Prozess selbst.
NUR wenn keine Übereinstimmung gefunden wird, wird die Umgebung des aktuellen Prozesses überprüft. Deshalb also getenv()[PHP]
gibt einen Wert zurück, aber getenv()[C]
nicht.
Nun, der "Hack" ist ebenfalls einfach:putenv()[PHP]
, speichert den angegebenen Schlüssel/Wert in der Umgebung des laufenden Prozesses, weshalb er später von getenv()[c]
gefunden werden kann .