Por que a variável de ambiente definida por SetEnv no Apache httpd.conf não pode ser passada para o php?

Por que a variável de ambiente definida por SetEnv no Apache httpd.conf não pode ser passada para o php?

Eu configurei uma variável de ambiente em httpd.conf:

SetEnv http_proxy "http://localhost:3128"

Mas não consigo obter essa variável no php usando getenv:

<?php
echo getenv("http_proxy");
phpinfo();
print_r($_ENV);

getenvretorna vazio e print_r($_ENV)mostra o seguinte conteúdo:

Array ( [LANG] => C [PATH] => /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin [NOTIFY_SOCKET] => /run/systemd/notify ) 

Curiosamente, a variável de ambiente é mostrada na seção “Ambiente Apache” da phpinfosaída.

(meu sistema é apache 2.4/php 5.6/CentOS7)

Responder1

PHP5.6 tem abelhasem suporte por 3 anosagora. Atualize para umVersão Atualagora! Em seguida, altere o seguinte:

Uso SetEnv HTTP_PROXY "http://localhost:3128"- variáveis ​​de ambiente diferenciam maiúsculas de minúsculas.

Use getenv(varname: "HTTP_PROXY", local_only: true)para solicitar uma variável do ambiente do servidor.

Se você não especificar explicitamente para receber apenas variáveis ​​locais, você obterá resultados do fastcgi, portanto, para um nome de var começando com HTTP_isso, você poderáconfundir perigosamente código insegurocom cabeçalhos e ésilenciosamente descartado. A desativação do comportamento SAPI édocumentado na descrição da função getenv():

Se o PHP estiver rodando em um SAPI como Fast CGI, esta função sempre retornará o valor de uma variável de ambiente definida pelo SAPI, mesmo que putenv() tenha sido usado para definir uma variável de ambiente local com o mesmo nome. Use o parâmetro local_only para retornar o valor das variáveis ​​de ambiente definidas localmente.

informação relacionada