2012-05-26 20 views
5

Existen algunas secuencias de comandos que necesitan que se establezcan determinadas rutas en el entorno para su ejecución. Quiero editar mi ruta para incluir esas ubicaciones. Estas son las ubicaciones que deseo agregar a mi ruta de acceso de administrador.Cómo modifico la ruta utilizada por exec en php

$JAVA_HOME = "/usr/java/jdk1.6.0_31"; 
$ANT_HOME = "/usr/apache-ant-1.8.3"; 
$ANT_BIN = "$ANT_HOME/bin"; 
$JAVA_BIN = "$JAVA_HOME/bin"; 
$ADDPATH=$JAVA_HOME . ":" . $ANT_HOME . ":" . $ANT_BIN .":" . $JAVA_BIN . ":" . $PATH; 

y solía putenv

putenv("JAVA_HOME=" . $JAVA_HOME); 
putenv("ANT_HOME=" . $ANT_HOME); 
putenv("ANT_BIN=" . $ANT_BIN); 
putenv("JAVA_BIN=" . $JAVA_BIN); 
putenv("PATH=".$_ENV["PATH"].":".$ADDPATH); 

Sin embargo cuando hago un

echo getenv("PATH"); 

me sale

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 

Tengo dos preguntas: (a)? ¿Cómo Establecí la variable de ruta en t él valora Quiero (b) ¿Hay una manera (o una ubicación) de agregar estas ubicaciones para ser parte del entorno del servidor (dentro de las configuraciones de php.ini o apache) en lugar de usar la secuencia de comandos para hacer estas ediciones.

Respuesta

1

Intente utilizar apache_setenv() y .

+0

Gracias, contesta mi primera consulta. Sin embargo, me gustaría utilizar una solución más elegante para editar las configuraciones del servidor desde los archivos de configuración, en lugar de cambiarla en cada secuencia de comandos. –

1

Para establecer variables de entorno en php, me referiré a la documentación oficial putenv:

Añade posiciones de ajuste del entorno de servidor. La variable de entorno solo existirá mientras dure la solicitud actual. Al final de la solicitud , el entorno se restablece a su estado original.

Establecer ciertas variables de entorno puede ser una potencial infracción de seguridad . La directiva safe_mode_allowed_env_vars contiene una lista de prefijos delimitados por comas . En modo seguro, el usuario solo puede alterar variables de entorno cuyos nombres comiencen con los prefijos suministrados por esta directiva. De forma predeterminada, los usuarios solo podrán establecer variables de entorno que comiencen con PHP_ (por ejemplo, PHP_FOO = BAR). Nota: si esta directiva está vacía, PHP permitirá al usuario modificar CUALQUIER variable de entorno !

La directiva safe_mode_protected_env_vars contiene una lista separada por comas de variables de entorno, que el usuario final no será capaz de cambio usando putenv(). Estas variables estarán protegidas incluso si safe_mode_allowed_env_vars está configurado para permitir su modificación.

Creo que definitivamente no es el camino a seguir, si no casos muy particulares; en las otras variables de entorno ajuste de las manecillas en la configuración httpd es muy fácil, utilizando el módulo mod_env 's SetEnv Directiva:

Directiva SetEnv

Description: Sets environment variables 
Syntax:  SetEnv env-variable value 
Context:  server config, virtual host, directory, .htaccess 
Override:  FileInfo 
Status:  Base 
Module:  mod_env 

Establece una variable de entorno interno, que queda a disposición de Apache HTTP Server módulos y pasados ​​a scripts CGI y páginas SSI.

Ejemplo

SetEnv SPECIAL_PATH /foo/bin 

Las variables de entorno internos establecidos por esta directiva se establecen después de la mayoría de directivas Solicitud de procesamiento de principios se ejecutan, tales como el control de acceso y el mapeo-URI-a nombre de archivo. Si la variable de entorno que está configurando se entiende como entrada en esta primera fase de procesamiento de , como la directiva RewriteRule, debe en su lugar establecer la variable de entorno con SetEnvIf.

Ah se puede ir a casi todas partes, desde httpd.conf principal, a configuraciones de host virutal, o incluso en .htaccess cuando se otorga anulación FileInfo, que resultan ser muy versátil.

Refs:

+0

Pude hacer que la ruta del script cambiara usando la respuesta @bsdnoobz. Entonces la ruta necesita ser cambiada de Apache2 ya que no estoy corriendo en modo seguro. Fui al directorio apache2 pero no puedo encontrar el archivo mod_env. La documentación muestra lo que quiero hacer. Pero puedes decirme cómo hacerlo. es decir, agrega la entrada al archivo de configuración de Apache. Soy relativamente nuevo en la configuración de Apache2. –

+0

Eso depende de su distribución de os/httpd. En general, lo primero que se debe hacer es verificar si _LoadModule module_env_ está en _httpd.conf_ apache archivo de configuración principal. Si es así, el módulo está cargado y activo. Luego, si desea que la variable env esté disponible en toda la instalación de apache, coloque la directiva en _httpd.conf_; si lo quiere disponible solo para un sitio, póngalo dentro de un _VirtualHost_; o puede colocarlo en un archivo .htaccess, luego de otorgar _AllowOverride FileInfo_ al VirtualHost correspondiente. Lea sobre htaccess aquí: http://httpd.apache.org/docs/2.2/howto/htaccess.html –

+0

Encendí phpinfo y me mostró que mod_env está cargado en mi servidor. A continuación fui a apache httpd.conf y editado ' Opciones Ninguno Ninguno AllowOverride Orden negar, permiten Denegar de todos ' 'a Opciones Ninguno /usr/java/jdk1.6.0_31 SetEnv PATH : /usr/apache-ant-1.8.3: /usr/apache-ant-1.8.3/bin: /usr/java/jdk1.6.0_31/bin AllowOverride None Orden negar, permitir denegar de todos 'y reinicié Apache, pero no pude obtener el camino para reflejar el cambio. ¿Me falta algo? –

Cuestiones relacionadas