Próbuję przekazać zmienną środowiskową z .htaccess przez PHP. Działa to dobrze na moim lokalnym serwerze WAMP, ale na serwerze, na którym znajduje się moja witryna, nie udaje się to bez powodu.Zmienne środowiskowe nie są przekazywane od .htaccess do PHP
Oto moja konfiguracja testu:
.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>
Na moim lokalnego serwera, coraz test.php poprawnie zwraca:
getenv('TEST_VARIABLE') = test_value
getenv('REDIRECT_TEST_VARIABLE') =
Ale na serwer produkcyjny, zwraca:
getenv('TEST_VARIABLE') =
getenv('REDIRECT_TEST_VARIABLE') =
Czego już wykluczyć:
mod_env
nie jest zainstalowane/włączone przez gospodarza. Nie może być, ponieważ wtedySetEnv
nie zostanie rozpoznany i dostanę 500 podczas przetwarzania .htaccess.AllowOverrides
whttpd.conf
dla tego katalogu nie obejmujeFileInfo
. Nie może być, ponieważ wtedy Apache rzuciłby błąd "SetEnv nie jest tu dozwolony", gdy napotkał dyrektywęSetEnv
, a ja znowu dostałbym 500.variables_order
w php.ini nie obejmuje 'e'. To by wyjaśniało, że superglobalny$_ENV
jest pusty (który jest), ale nie dlaczegogetenv()
nie zwraca wartości dla tych zmiennych.całego środowiska jest wkręca się. Nie można, ponieważ
getenv('PATH')
igetenv('SERVER_NAME')
nadal zwracają prawidłowe wartości.
W tym momencie nie mam pojęcia, co może być przyczyną takiej konfiguracji.
SetEnv _jest_ a. Htaccess, ale wykończyłeś go: kiedy wstępnie ustawiłem zmienną na HTTP_, wszystko działało. Nie widziałem tego wymogu udokumentowanego w jakimkolwiek "oficjalnym" źródle, co jest dziwne, ale hej, jeśli działa, nie dotykaj go, prawda? – nitwit
To samo wymaganie wydaje się dotyczyć RewriteRule. * - (E = HTTP_VAR: VAL) na niektórych serwerach. – Chris
wpadł na ten sam problem, tak dziwny, że nigdzie go nie udokumentowano. W moim przypadku tak się nie stało ze skryptem PHP, ale raczej w Perlu. – insaner