Pourquoi mon $_ENV vide?
Je suis en cours d'exécution Apache/2.2.11 (Win32) PHP/5.3.0
et je n'ai la suite dans ma .htaccess:
SetEnv FOO bar
Si j'ai imprimer le $_ENV
variable dans un fichier PHP, j'obtiens un tableau vide. Pourquoi ne pas ma variable d'environnement apparaissent là? Pourquoi est-il vide en premier lieu?
Je n'ai trouver ma variable, mais il apparaît dans la $_SERVER
variable. Et pour une raison quelconque, il apparaît deux fois, en quelque sorte. Pourquoi est-ce?
[REDIRECT_FOO] => bar
[FOO] => bar
Il semble que je peux obtenir de l'aide getenv('FOO')
, alors peut-être que je devrais juste l'utiliser à la place. Mais je suis toujours un peu curieux de ce qui cause cette. Est-ce un Windows question? Ou ce qui se passe?
- Pas un Windows question, c'est la même chose sous Linux (l'exécution de PHP en tant que module). Je ne suis pas sûr de connaître les détails, mais il peut être le enivronment du serveur web n'est pas la même que celle de PHP, et c'est pourquoi il est envoyé comme un
$_SERVER
var. Je donnerais mon vote pour l'utilisation degetenv()
qui fouille les deux à la casse autant que j'imagine. - Sur une note de côté: la CLI instance ne l'obtenez dans
$_ENV
. - Votre mise à jour m'a aidé. Si vous l'avez modifiée pour la réponse, je serais heureux de upvote il.
- Votre solution affiché dans la question qui devrait vraiment être affiché comme une réponse ci-dessous. Cette question a été liée à plusieurs reprises comme un double de la proximité de la cible, mais la solution n'est pas dans la question 🙂
- Merci pour la note. Bonne idée. De le faire maintenant 🙂
Vous devez vous connecter pour publier un commentaire.
S'avère qu'il y a deux problèmes ici:
1.
$_ENV
n'est renseigné que si php.ini permet, qui n'a pas l'air de le faire par défaut, au moins pas dans le défaut WAMP server installation.Quand j'ai mis le
variables_order
retour àEGPCS
,$_ENV
n'est plus vide.2. Lorsque vous utilisez
SetEnv
dans votre.htaccess
, il se retrouve dans les$_SERVER
, pas dans$_ENV
, qui je dois dire est un peu déroutant quand il est nomméSetEnv
...3. Le
getenv
fonction fonctionné, parce qu'il a apparemment recherches les deux$_ENV
et$_SERVER
. En outre, il semble faire tellement insensible à la casse, ce qui pourrait être utile.PHP: syntax error, unexpected '"' in php.ini
)$_ENV
variables sont importés de l'environnement dans lequel PHP est en cours d'exécution, et en fonction de votre configuration (le système d'exploitation, votre serveur, si PHP fonctionne comme module Apache ou en vertu de FastCGI, etc.), cela peut varier considérablement.IIRC dans un standard d'Apache+mod_php installer sur Windows, la seule façon de modifier les variables dans
$_ENV
est de changer de Windows variables d'environnement (voir cette). Ceci peut être important lorsque vous traitez avec des extensions de PHP sur Windows, parce que certains d'entre eux (par exemple:php_ldap
) ne sont configurables via des variables d'environnement sur$_ENV
.REDIRECT_*
variables apparaissent que si vous utilisez les RewriteRules. Sur mon serveur, ils apparaissent aussi comme ça. Il pourrait avoir quelque chose à voir avec l'exécution en vertu de FastCGI. Et si elle est combinée avec suexec, qui est le plus probable que de nettoyer l'environnement complet de la var de la piscine. Il y a peut être une configuration supplémentaire nécessaire pour les récupérer,PassEnv
en particulier. Pourquoi la fonction getenv() fonctionne pour vous, je n'ai aucune idée. Mais tous les phénomènes sont spécifiques à votre serveur et la configuration de php. Poser sur serverfault, ils devraient le savoir.getenv
travaillé: Juste trouvé apparemment recherches$_ENV
et$_SERVER
:p