Environment-Variablen werden nicht übergeben, aus .htaccess auf PHP
Ich bin versucht, übergeben Sie eine Umgebungsvariable aus .htaccess über PHP. Das funktioniert gut auf meinem lokalen WAMP-server, sondern auf dem server, wo meine Webseite gehostet wird, ist es nicht ohne Grund.
Hier ist meine test-Konfiguration:
.htaccess:
SetEnv TEST_VARIABLE test_value
test.php:
<pre>
getenv('TEST_VARIABLE') = <?php print getenv('TEST_VARIABLE'); ?>
getenv('REDIRECT_TEST_VARIABLE') = <?php print getenv('REDIRECT_TEST_VARIABLE'); ?>
</pre>
Auf meinem lokalen server bekommen test.php richtig gibt:
getenv('TEST_VARIABLE') = test_value
getenv('REDIRECT_TEST_VARIABLE') =
Aber auf den Produktions-server gibt es:
getenv('TEST_VARIABLE') =
getenv('REDIRECT_TEST_VARIABLE') =
Dinge, die ich habe ausgeschlossen:
-
mod_env
ist nicht installiert/aktiviert durch den Gastgeber. Kann nicht sein, denn dannSetEnv
würde Sie nicht erkannt werden und ich bekommen würde, eine 500 während der Verarbeitung .htaccess. -
AllowOverrides
imhttpd.conf
für dieses Verzeichnis noch nicht enthaltenFileInfo
. Kann nicht sein, weil dann der Apache würde einen Fehler auslösen "SetEnv hier nicht erlaubt", wenn man auf dieSetEnv
Richtlinie und die ich bekommen würde, eine 500 wieder. -
variables_order
in php.ini enthalten nicht 'E'. Dies würde erklären, die$_ENV
superglobale leer ist (was es ist), aber nicht, warumgetenv()
nicht zurück Werte für diese Variablen. -
Ganze Umgebung versaut. Kann nicht sein, denn
getenv('PATH')
undgetenv('SERVER_NAME')
noch zurück, gültige Werte.
In diesem Punkt bin ich ratlos, was die Konfiguration könnte die Ursache sein.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube nicht, dass mit setenv arbeitet in der Regel in .htaccess. Es ist ein shell-Skript-Befehl (bash, C-shell, etc.). Wenn Ihr server hat Unterstützung setenv, nach https://kb.mediatemple.net/questions/36/Using+Umwelt+Variablen+in+PHP#gs müssen Sie die Variablen-Namen beginnen mit HTTP_.
Wenn Sie mit Ihrem home-server auf einem Mac oder suEXEC aktiviert ist, gibt es Sicherheitsmaßnahmen, um strip-jeder nicht-http-Umgebungsvariablen definiert sind, daher erscheint er nicht in $_ENV['APPLICATION_ENV']. Sie KÖNNEN jedoch den Zugriff auf diese durch eine native PHP-Funktion, um die gleiche Sache.
Dieser Funktion erhalten alle Umgebungsvariablen definiert, die mit SetEnv in Ihr .htaccess Datei, oder jede Umgebungsvariable, die gesetzt ist in der php.ini, auch wenn PHP entfernt diese von der $_ENV-variable.
Könnte man dann definieren Sie die Umgebungsvariablen in PHP-wenn Sie möchten, obwohl es nicht empfohlen.
Oder die bessere Lösung: definieren Sie eine Globale:
Sobald Sie das tun, sollte es funktionieren wie gewünscht.