Ich laufe Apache/2.2.11 (Win32) PHP/5.3.0
und habe in meiner .htaccess-Datei Folgendes getan:
SetEnv FOO bar
Wenn ich die $_ENV
Variable in einer PHP-Datei drucke, erhalte ich ein leeres Array. Warum wird meine Umgebungsvariable dort nicht angezeigt? Warum ist es überhaupt leer?
Ich habe meine Variable zwar gefunden, aber sie erscheint in der $_SERVER
Variablen. Und aus irgendeinem Grund erscheint es zweimal, irgendwie. Warum ist das?
[REDIRECT_FOO] => bar
[FOO] => bar
Es scheint, dass ich es mit bekommen kann getenv('FOO')
, also sollte ich das vielleicht stattdessen einfach benutzen. Aber ich bin immer noch ein bisschen neugierig, was das verursacht. Ist das ein Windows-Problem? Oder was ist los?
php
apache
environment-variables
Svish
quelle
quelle
$_SERVER
var gesendet . Ich würde meine Stimme für die Verwendung abgeben, beigetenv()
der beide, soweit ich weiß, nur zwischen Groß- und Kleinschreibung unterscheiden.$_ENV
.Antworten:
Es stellte sich heraus, dass es hier zwei Probleme gab:
1.
$_ENV
wird nur ausgefüllt, wenn php.ini dies zulässt , was standardmäßig nicht der Fall zu sein scheint, zumindest nicht in der Standardinstallation des WAMP-Servers .; This directive determines which super global arrays are registered when PHP ; starts up. If the register_globals directive is enabled, it also determines ; what order variables are populated into the global space. G,P,C,E & S are ; abbreviations for the following respective super globals: GET, POST, COOKIE, ; ENV and SERVER. There is a performance penalty paid for the registration of ; these arrays and because ENV is not as commonly used as the others, ENV is ; is not recommended on productions servers. You can still get access to ; the environment variables through getenv() should you need to. ; Default Value: "EGPCS" ; Development Value: "GPCS" ; Production Value: "GPCS"; ; http://php.net/variables-order variables_order = "GPCS"
Wenn ich den
variables_order
Rücken auf setzeEGPCS
,$_ENV
ist nicht mehr leer.2. Wenn Sie
SetEnv
in Ihrem verwenden.htaccess
, endet es in$_SERVER
, nicht in$_ENV
, was ich sagen muss, ist ein bisschen verwirrend, wenn es benannt wirdSetEnv
...# .htaccess SetEnv ENV dev SetEnv BASE /ssl/ # php var_dump($_SERVER['ENV'], $_SERVER['BASE']); // string 'dev' (length=3) // string '/ssl/' (length=5)
3. Die
getenv
Funktion funktioniert immer und wird von der PHP-Einstellung für $ _ENV nicht beeinflusst. Außerdem scheint sie dies unabhängig von Groß- und Kleinschreibung zu tun, was nützlich sein könnte.var_dump(getenv('os'), getenv('env')); // string 'Windows_NT' (length=10) // string 'dev' (length=3)
quelle
PHP: syntax error, unexpected '"' in php.ini
)$_ENV
Variablen werden aus der Umgebung importiert, unter der PHP ausgeführt wird. Abhängig von Ihrem Setup (Betriebssystem, Server, ob PHP als Apache-Modul oder unter FastCGI usw. ausgeführt wird) kann dies sehr unterschiedlich sein.IIRC in einer Standardinstallation von Apache + mod_php unter Windows besteht die einzige Möglichkeit zum Ändern von Variablen darin
$_ENV
, die Umgebungsvariablen von Windows zu ändern (siehe dies ). Dies kann beim Umgang mit PHP-Erweiterungen unter Windows von Bedeutung sein, da einige von ihnen (z. B.php_ldap
:) nur über Umgebungsvariablen konfiguriert werden können$_ENV
.quelle
REDIRECT_*
Variablen werden angezeigt, wenn Sie RewriteRules verwenden. Auf meinem Server erscheinen sie auch nur so. Es könnte etwas damit zu tun haben, unter FastCGI zu laufen. In Kombination mit suexec wird dadurch höchstwahrscheinlich der gesamte Umgebungsvariablenpool bereinigt.PassEnv
Insbesondere ist möglicherweise eine zusätzliche Konfiguration erforderlich, um sie wiederherzustellen . Ich habe keine Ahnung, warum getenv () für Sie funktioniert. Alle Phänomene sind jedoch spezifisch für Ihre Server- und PHP-Konfiguration. Fragen Sie bei Serverfehler, sie sollten es wissen.quelle
getenv
gearbeitet hat: Ich habe gerade herausgefunden, dass es anscheinend sucht$_ENV
und$_SERVER
: p