ordem das operações para variáveis de ambiente

1

Eu quero entender como as variáveis de ambiente são definidas e redefinidas (sobrescritas). Estou executando o Apache / 2.2.24 (Unix) PHP / 5.4.14 em um mac. Minha teoria é esta:

Vars de ambiente podem ser definidas no bash, então elas podem ser sobrescritas com httpd.conf precedendo uma diretiva VirtualHost que precede php.ini, que pode então ser sobrescrita por .htaccess (se permitido) e finalmente por PHP

Eu tentei o seguinte:

  1. definindo a variável de ambiente no bash: adicionei export ENVIRONMENT='local' ao meu arquivo ~ / .bashrc , reiniciei o apache e não obtive nenhuma saída de print_r($_ENV); (em um arquivo index.php simples na raiz do meu servidor web). Eu também tentei colocar ENVIRONMENT='local' em / etc / environment , e reiniciar o apache, nada, assim como / etc / bashrc , reinicie o apache. ainda nada.

  2. definindo a variável de ambiente em httpd.conf: adicionei SetEnv ENVIRONMENT 'local-httpd ao final do meu arquivo /etc/apache2/httpd.conf (mas antes Eu carrego outros arquivos conf, como host virtual [ Include /private/etc/apache2/other/*.conf ]). Agora vejo a variável na matriz print_r($_SERVER); , mas não print_r($_ENV); .

  3. definindo a variável de ambiente em httpd-vhosts.conf: adicionei SetEnv ENVIRONMENT 'local-vhost ao meu arquivo /etc/apache2/extra/httpd-vhosts.conf na minha diretiva genérica que aponta para a minha raiz de documento padrão. Vejo agora que a variável foi sobrescrita (para local-vhost do local-httpd, portanto, sei onde a variável está sendo definida).

  4. definindo a variável de ambiente em php.ini: enquanto procurava um local adequado para colocar minha variável de ambiente, notei que variables_order = "GPCS" foi definido como o valor de produção em vez de EGPCS . Eu mudei, reiniciei meu servidor e descobri que agora estava obtendo a saída para print_r($_ENV); , mas não minha variável personalizada esperada. Parece também que não consigo definir uma variável personalizada nesse arquivo. Por favor, diga-me se estou errado

  5. configuração da variável de ambiente em .htaccess: adicionei SetEnv ENVIRONMENT 'local-htaccess' . Isso funcionou como esperado, sobrescrevendo todos os outros valores que foram definidos.

  6. configuração / variável de ambiente de sobrescrita no PHP:

    if (...) {
     putenv('ENVIRONMENT=local');
    }

Estou fazendo esta pergunta porque tenho muitos servidores de teste locais e remotos, alguns dos quais podem ou não me permitir acesso para modificar variáveis httpd, httpd-vhost, php.ini ou ambiente. Eu quero entender o que é melhor para esses cenários de diferença (hospedagem compartilhada, heroku, servidores locais, etc)

Eu obviamente não sei como definir corretamente a variável de ambiente no bash de uma maneira que o php possa usar, eu gostaria de saber como fazer isso (como eu acho que o Heroku faz algo similar com heroku config set... )

    
por alyda 31.10.2013 / 01:33

1 resposta

2

normalmente o Apache usa o usuário www-data, o que significa que você não precisa modificar o ~ / .bashrc mas /var/www/.bashrc.

Porque:


$ ~www-data
-bash: /var/www: Is a directory
    
por 14.03.2014 / 15:38