PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Warum wird putenv() für eine bereits definierte Umgebungsvariable benötigt?

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 .