Como você pode definir a PATHvariável de ambiente para o Apache2? Eu tentei configurá-lo dentro /usr/sbin/envvarse no httpd.conf com SetEnv PATH(e passá-lo para o SSI com o PassEnv), mas ele simplesmente não é levado adiante.
Como você pode definir a PATHvariável de ambiente para o Apache2? Eu tentei configurá-lo dentro /usr/sbin/envvarse no httpd.conf com SetEnv PATH(e passá-lo para o SSI com o PassEnv), mas ele simplesmente não é levado adiante.
Respostas:
Como já foi dito, você faz isso usando o arquivo de variável de ambiente an. Fornecerei mais detalhes nesta resposta e mostrarei a prova de que funciona.
Esse arquivo de variável de ambiente deve ser de origem apachectl. Na minha caixa do Ubuntu, este arquivo está em /etc/apache2/envvars. No RedHat, isso é em /etc/sysconfig/httpd. No FreeBSD, isso está definido /etc/rc.conf(eu acho). Como alternativa, você também pode definir essas informações em um script de inicialização ( /etc/init.d/httpdou apachectletc.). No entanto, acho melhor deixar os scripts de inicialização em paz, se possível. O melhor lugar é no script de variáveis de ambiente designado.
Verifique a localização desse arquivo envvars. No Ubuntu, /etc/init.d/apache2ctlmostra que ele fornece /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
Para visualizar as variáveis, estou usando um script Perl printenv.cgi e disponibilizado em http://example.org/cgi-bin/printenv.cgi . O script me mostra o seguinte PATH:
PATH = /usr/local/bin:/usr/bin:/bin
Para alterar essas variáveis, edito o arquivo envvars:
$ sudo vim /etc/apache2/envvars
Modifique seu PATH neste arquivo. Neste exemplo, anexarei /opt/local/binao meu PATH. Em alguns casos, pode ser necessário usar export PATHe não apenas PATH:
export PATH=$PATH:/opt/local/bin
Reinicie o apache
$ sudo service apache2 restart
* Restarting web server apache2
... waiting ...done.
$
Veja os resultados em http://example.org/cgi-bin/printenv.cgi , que agora mostram 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 seu script esteja ignorando ou substituindo o PATH.
gracefule isso não causou as alterações entrarem em vigor.
No 2.2, a variável de ambiente PATH não pode ser definida usando Setenv.
No meu sistema é /etc/apache2/envvars.
PATH
Verifique se você carregou o mod_env.
A sintaxe correta é (exemplo):
SetEnv LD_LIBRARY_PATH /usr/local/lib
Isso funcionou para mim.
PATH
Você pode configurá-lo em start()função do script init, algo como isto:
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 /var/www/cgi-bine verifique http://domain.com/cgi-bin/env.cgi, você verá os seguintes:
PATH = /sbin:/usr/sbin:/bin:/usr/bin:/var/ossec/bin
No RedHat com Apache 2.4.x compilado da fonte com --prefix=/usr --enable-layout=RedHato arquivo envvars está localizado em /usr/sbin/envvars. Posso confirmar que a configuração do 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 /usr/sbin/envvarsarquivo é originado na linha 49 de /usr/sbin/apachectl.
/usr/sbin/apachectlmenciona /etc/sysconfig/httpd, que contém: «Este arquivo não é mais usado para configurar variáveis de ambiente adicionais para o processo httpd. Foi substituído por systemd. » Paste.debian.net/361218
Edite o arquivo apache2 plist com o editor que desejar (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 EnvironmentVariableschave já existir, basta adicionar
<key>PATH</key>
<string>/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin</string>
ao <dict>
Nota: Para o Mac OSX 10.11 (EL Capitan) ou superior, é necessário executar o comando csrutil disableno Terminal após reiniciar e pressionar o CMD + R e, em seguida, você poderá editar este arquivo.
Reinicie o Apache2
$ sudo /usr/sbin/apachectl stop
$ sudo /usr/sbin/apachectl start
No meu sistema Apache2, achei que muitos visitantes só queriam amontoar minha coleção cuidadosamente compilada de Smileys / emoticons (sério!), Então decidi usar um link simbólico gerado aleatoriamente no caminho do diretório que seria escolhido como um Variável Apache2, e era praticamente impossível compartilhar links.
Portanto, a cada 30 minutos, o cron executava um script perl que reescreveria o arquivo .htaccess e incluiria um SetEnv como você pode ver abaixo:
....
SetEnv SMILEYDIR "QyQGTZ8cgcK3zMVL0aNJ"
Então, no topo das minhas páginas PHP, eu lia a variável assim, e mais tarde na página haveria essa 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!
PATH