Sto provando a passare una variabile d'ambiente da .htaccess a PHP. Funziona perfettamente sul mio server WAMP locale, ma sul server in cui è ospitato il mio sito Web, fallisce senza motivo.Le variabili d'ambiente non vengono passate da .htaccess a PHP
Ecco la mia configurazione di prova:
.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>
Sul mio server locale, ottenendo test.php correttamente restituisce:
getenv('TEST_VARIABLE') = test_value
getenv('REDIRECT_TEST_VARIABLE') =
Ma sul server di produzione, restituisce:
getenv('TEST_VARIABLE') =
getenv('REDIRECT_TEST_VARIABLE') =
cose che ho escludere:
mod_env
non è installato/attivato dall'host. Non può essere, perché quindiSetEnv
non verrebbe riconosciuto e otterrei un 500 durante l'elaborazione di .htaccess.AllowOverrides
inhttpd.conf
per questa directory non includeFileInfo
. Non può essere, perché quindi Apache avrebbe generato un errore "SetEnv non permesso qui" quando si incontrava la direttivaSetEnv
e avrei avuto di nuovo un 500.variables_order
in php.ini non include 'E'. Ciò spiegherebbe che il superglobale$_ENV
è vuoto (che è), ma non perchégetenv()
non restituisce valori per queste variabili.L'intero ambiente è danneggiato. Non può essere, perché
getenv('PATH')
egetenv('SERVER_NAME')
restituiscono ancora valori validi.
A questo punto non riesco a capire quale configurazione potrebbe causarlo.
SetEnv _is_ un comando .htaccess, ma lo hai inchiodato: una volta prefisso la variabile con HTTP_, tutto funzionava. Non ho visto quel requisito documentato in nessuna fonte "ufficiale", il che è strano, ma hey, se funziona non toccarlo, giusto? – nitwit
Lo stesso requisito sembra andare per RewriteRule. * - (E = HTTP_VAR: VAL) su alcuni server. – Chris
ci siamo imbattuti in questo stesso problema, così strano che non è documentato da nessuna parte. Nel mio caso, questo non è accaduto con uno script PHP, ma piuttosto in Perl. – insaner