Configurando a variável de ambiente PATH do Apache2

13

Como você pode definir a variável de ambiente PATH para o Apache2? Eu tentei defini-lo em /usr/sbin/envvars e no httpd.conf com SetEnv PATH (e passando-o para SSI com PassEnv), mas ele simplesmente não é levado adiante.

    
por Matteo 15.06.2010 / 11:08

8 respostas

15

Como outros já disseram, você faz isso usando o arquivo de variável de ambiente. Fornecerei mais detalhes nesta resposta e mostrarei a prova de que ela funciona.

Este arquivo de variável de ambiente deve ser fonte de apachectl . Na minha caixa Ubuntu, este arquivo está em /etc/apache2/envvars . No RedHat, isso é em /etc/sysconfig/httpd . No FreeBSD, isso é definido em /etc/rc.conf (eu acho). Como alternativa, você também pode definir essas informações em um script de inicialização ( /etc/init.d/httpd ou apachectl , etc.). No entanto, acho que é melhor deixar os scripts de inicialização sozinhos, se possível. O melhor lugar está no script de variáveis de ambiente designado.

  1. Verifique a localização deste arquivo envvars. No Ubuntu, /etc/init.d/apache2ctl mostra que ele origina /etc/apache2/envvars :

    # the path to the environment variable file
    test -z "$APACHE_ENVVARS" && APACHE_ENVVARS='/etc/apache2/envvars'
    # pick up any necessary environment variables
    if test -f $APACHE_ENVVARS; then
       . $APACHE_ENVVARS
    fi
    
  2. Para visualizar as variáveis, estou usando um script Perl printenv.cgi e está disponível no link . O script mostra o seguinte PATH:

    PATH = /usr/local/bin:/usr/bin:/bin
    
  3. Para alterar essas variáveis, edito o arquivo envvars:

    $ sudo vim /etc/apache2/envvars 
    
  4. Modifique seu PATH neste arquivo. Neste exemplo, adicionarei /opt/local/bin ao meu PATH. Em alguns casos, talvez seja necessário usar export PATH e não apenas PATH :

    export PATH=$PATH:/opt/local/bin
    
  5. Reinicie o apache

    $ sudo service apache2 restart
     * Restarting web server apache2
     ... waiting    ...done.
    $
    
  6. Veja os resultados no link , que agora mostra que o PATH agora contém um novo elemento:

    PATH = /usr/local/bin:/usr/bin:/bin:/opt/local/bin
    

Se o acima não funcionar, algo incomum pode estar acontecendo. Talvez o seu script esteja ignorando ou substituindo o PATH.

    
por 27.09.2011 / 19:29
4

On 2.2, the PATH environment variable cannot be set using Setenv.

link

    
por 04.06.2014 / 16:34
1

No meu sistema, é /etc/apache2/envvars .

    
por 15.06.2010 / 11:13
1

Certifique-se de ter carregado o mod_env.

A sintaxe correta é (exemplo):

SetEnv LD_LIBRARY_PATH /usr/local/lib

Isso funcionou para mim.

    
por 30.07.2010 / 13:50
1

Você pode configurá-lo na função start() do script de inicialização, algo assim:

start() {
        echo -n $"Starting $prog: "
        check13 || exit 1
        export PATH=${PATH}:/var/ossec/bin
        LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && touch ${lockfile}
        return $RETVAL
}

Crie um script Perl para listar todas as variáveis de ambiente:

#!/usr/bin/perl -wT
print "Content-type: text/html\n\n";

foreach $key (sort keys(%ENV)) {
  print "$key = $ENV{$key}<p>";
}

Coloque-o em /var/www/cgi-bin e verifique http://domain.com/cgi-bin/env.cgi , você verá o seguinte:

PATH = /sbin:/usr/sbin:/bin:/usr/bin:/var/ossec/bin
    
por 27.09.2011 / 18:44
1

No RedHat com o Apache 2.4.x compilado da origem com --prefix=/usr --enable-layout=RedHat , o arquivo envvars está localizado em /usr/sbin/envvars . Posso confirmar que configurar o PATH apropriado nesse arquivo faz com que o Apache e o PHP estejam cientes disso.

Eu usei a mesma abordagem que Stefan Lasiewski para determinar isso. Para o Apache 2.4.12 , o arquivo /usr/sbin/envvars é originado na linha 49 de /usr/sbin/apachectl .

    
por 08.04.2015 / 20:31
1

Edite o arquivo plist do Apache2 com o editor que você quiser (por exemplo, usando o vim):

$ sudo vim /System/Library/LaunchDaemons/org.apache.httpd.plist

Adicione o seguinte ao arquivo plist:

<key>EnvironmentVariables</key>
<dict>
  <key>PATH</key>
  <string>/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin</string>
</dict>

Se a chave EnvironmentVariables já existir, basta adicionar

<key>PATH</key>
<string>/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin</string>

para o <dict>

NB: Para o Mac OSX 10.11 (EL Capitan) ou superior, você precisa executar o comando csrutil disable no Terminal depois de reinicializar e bater no CMD + R e, em seguida, poderá editar este arquivo.

Reinicie o Apache2

$ sudo /usr/sbin/apachectl stop
$ sudo /usr/sbin/apachectl start
    
por 18.01.2017 / 15:44
0

No meu sistema Apache2, descobri que muitos visitantes só queriam pilhar minha coleção cuidadosamente compilada de Smileys / emoticons (sério!), então decidi usar um link simbólico gerado aleatoriamente para o caminho do diretório que seria escolhido como uma variável do Apache2, e era praticamente impossível compartilhar links.

Assim, a cada 30 minutos, o cron executou um script perl que iria reescrever o arquivo .htaccess e incluir um SetEnv como você pode ver abaixo:

....
SetEnv SMILEYDIR "QyQGTZ8cgcK3zMVL0aNJ"

Então, na parte superior das minhas páginas do PHP, eu li a variável assim e, mais tarde, na página, havia aquela variável usada para criar um caminho para o smiley apropriado:

$SMILEYDIR = apache_getenv("SMILEYDIR");
....
....
echo '<img src="/'.$SMILEYDIR.'//SMILEY_yay!.gif" border="0" hspace="3">';

Funciona para mim e espero que ajude você!

    
por 14.08.2011 / 15:56

Tags