¿Cómo se puede establecer la PATHvariable de entorno para Apache2? Intenté configurarlo en /usr/sbin/envvarsy en httpd.conf con SetEnv PATH(y pasarlo a SSI con PassEnv), pero simplemente no se deja llevar.
¿Cómo se puede establecer la PATHvariable de entorno para Apache2? Intenté configurarlo en /usr/sbin/envvarsy en httpd.conf con SetEnv PATH(y pasarlo a SSI con PassEnv), pero simplemente no se deja llevar.
Respuestas:
Como otros han dicho, esto se hace mediante el uso de un archivo de variable de entorno. Proporcionaré más detalles en esta respuesta y mostraré pruebas de que funciona.
Este archivo de variable de entorno debe ser fuente apachectl. En mi cuadro de Ubuntu, este archivo está en /etc/apache2/envvars. En RedHat, esto es a las /etc/sysconfig/httpd. En FreeBSD, esto se establece en /etc/rc.conf(creo). Como alternativa, también puede configurar esta información en un script de inicio ( /etc/init.d/httpdo apachectl, etc.). Sin embargo, creo que es mejor dejar solo los scripts de inicio si es posible. El mejor lugar es en el script de variables de entorno designado.
Verifique la ubicación de este archivo envvars. En Ubuntu, /etc/init.d/apache2ctlmuestra que las fuentes /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 ver las variables, estoy usando un script de Perl printenv.cgi , y lo hice disponible en http://example.org/cgi-bin/printenv.cgi . El script me muestra el siguiente CAMINO:
PATH = /usr/local/bin:/usr/bin:/bin
Para cambiar estas variables, edito el archivo envvars:
$ sudo vim /etc/apache2/envvars
Modifique su RUTA en este archivo. En este ejemplo, adjuntaré /opt/local/bina mi RUTA. En algunos casos, es posible que deba usar export PATHy no solo PATH:
export PATH=$PATH:/opt/local/bin
Reiniciar apache
$ sudo service apache2 restart
* Restarting web server apache2
... waiting ...done.
$
Vea los resultados en http://example.org/cgi-bin/printenv.cgi , que ahora muestran que la RUTA ahora contiene un nuevo elemento:
PATH = /usr/local/bin:/usr/bin:/bin:/opt/local/bin
Si lo anterior no funciona, puede estar sucediendo algo inusual. Quizás su guión esté ignorando o sobrescribiendo la RUTA.
gracefuly eso no causó que los cambios tuvieran efecto.
En 2.2, la variable de entorno PATH no se puede establecer con Setenv.
En mi sistema lo es /etc/apache2/envvars.
PATH
Puede configurarlo en start()función del guión de inicio, algo como esto:
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
}
Cree una secuencia de comandos Perl para enumerar todas las variables de entorno:
#!/usr/bin/perl -wT
print "Content-type: text/html\n\n";
foreach $key (sort keys(%ENV)) {
print "$key = $ENV{$key}<p>";
}
Colóquelo /var/www/cgi-biny verifique http://domain.com/cgi-bin/env.cgique verá lo siguiente:
PATH = /sbin:/usr/sbin:/bin:/usr/bin:/var/ossec/bin
En RedHat con Apache 2.4.x compilado desde la fuente con --prefix=/usr --enable-layout=RedHatel archivo envvars se encuentra en /usr/sbin/envvars. Puedo confirmar que establecer la RUTA adecuada en ese archivo hace que Apache y PHP lo sepan.
Usé el mismo enfoque que Stefan Lasiewski para determinar eso. Para Apache 2.4.12 , el /usr/sbin/envvarsarchivo se origina en la línea 49 de /usr/sbin/apachectl.
/usr/sbin/apachectlmenciona en su /etc/sysconfig/httpdlugar, que contiene: «Este archivo ya no se utiliza para configurar variables de entorno adicionales para el proceso httpd. Ha sido reemplazado por systemd. » Paste.debian.net/361218
Edite el archivo plist Apache2 con el editor que desee (ejemplo usando vim):
$ sudo vim /System/Library/LaunchDaemons/org.apache.httpd.plist
Agregue lo siguiente al archivo plist:
<key>EnvironmentVariables</key>
<dict>
<key>PATH</key>
<string>/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin</string>
</dict>
Si la EnvironmentVariablesclave ya existe, simplemente agregue
<key>PATH</key>
<string>/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin</string>
al <dict>
NB: para Mac OSX 10.11 (EL Capitan) o superior, debe ejecutar el comando csrutil disableen la Terminal después de reiniciar y presionar CMD + R y luego podrá editar este archivo.
Reiniciar Apache2
$ sudo /usr/sbin/apachectl stop
$ sudo /usr/sbin/apachectl start
En mi sistema Apache2 descubrí que muchos visitantes solo querían saquear mi colección cuidadosamente compilada de emoticones / emoticones (¡en serio!), Así que decidí usar un enlace simbólico generado aleatoriamente a la ruta del directorio que se recogería como un Apache2 variable, y era prácticamente imposible compartir enlaces.
Entonces, cada 30 minutos, cron ejecutó un script perl que reescribiría el archivo .htaccess e incluiría un SetEnv como puede ver a continuación:
....
SetEnv SMILEYDIR "QyQGTZ8cgcK3zMVL0aNJ"
Luego, en la parte superior de mis páginas PHP, leía la variable así, y más tarde en la página, esa variable se usaría para construir una ruta hacia el smiley apropiado:
$SMILEYDIR = apache_getenv("SMILEYDIR");
....
....
echo '<img src="/'.$SMILEYDIR.'//SMILEY_yay!.gif" border="0" hspace="3">';
¡Funciona para mí, y espero que te ayude!
PATH