2012-03-09 13 views
6

Tengo un script que usa passthru() para ejecutar un comando. Necesito establecer algunas variables de entorno de shell antes de ejecutar este comando, de lo contrario no podrá encontrar sus bibliotecas.exporta la variable de entorno del shell antes de ejecutar el comando desde el script CLI de PHP

He intentado lo siguiente:

putenv("LD_LIBRARY_PATH=/path/to/lib"); 
passthru($cmd); 

Usando putenv() no aparece para propagar al comando que estoy corriendo. No dice que no puede encontrarlo en las bibliotecas. Cuando ejecuto export LD_LIBRARY_PATH=/path/to/lib en bash, funciona bien.

También probé el siguiente (en vano):

exec("export LD_LIBRARY_PATH=/path/to/lib"); 
passthru($cmd); 

¿Cómo puedo configurar una variable de entorno de PHP, que se propaga a procesos hijo de mi script PHP?

¿Estoy limitado a verificar si una variable no existe en el entorno actual y pedirle al usuario que la configure manualmente?

+0

posible duplicado de http://stackoverflow.com/questions/2002970/export-a-variable-from-php-to-shell – Electronick

+0

He leído que se trate, esto parece similar pero si lo lee , Estoy preguntando cómo lograr algo diferente. –

Respuesta

5

no estoy 100% familiarizados con cómo funciona el exec de PHP, pero ¿ha intentado: exec("LD_LIBRARY_PATH=/path/to/lib $cmd")

sé que esto funciona en la mayoría de los depósitos, pero no estoy seguro de cómo hacer las cosas de PHP.

EDIT: Suponiendo que esto esté funcionando, para hacer frente a múltiples variables simplemente separarlos por un espacio:

exec("VAR1=val1 VAR2=val2 LD_LIBRARY_PATH=/path/to/lib $cmd")

+0

¿Y si tengo más de una variable? 'MYVAR = valor; LD_LIBRARY_PATH =/ruta/a/lib $ cmd'? –

+1

sin punto y coma, solo un espacio – klaustopher

+0

parece, al menos según el enlace de ubuntu que publiqué, aunque nunca he hecho eso – dldnh

1

Un par de cosas vienen a la mente. Una de ellas es que $ cmd sea una secuencia de comandos que incluya la configuración de la variable de entorno antes de ejecutar el programa real.

Otra idea es la siguiente: Sé que puede definir una variable y ejecutar un programa en la misma línea, tales como:

DISPLAY=host:0.0 xclock 

pero no sé si es que el trabajo en el contexto de passthru

https://help.ubuntu.com/community/EnvironmentVariables#Bash.27s_quick_assignment_and_inheritance_trick

+0

$ cmd es en realidad un comando para ejecutar un archivo de compilación ant, este script ajusta la construcción de ese comando. –

2

Se podía anteponer sus asignaciones de variables a $ cmd.

[[email protected] ~]$ cat doit.php 
<?php 

$cmd='echo "output=$FOO/$BAR"'; 

$cmd="FOO=bar;BAR=baz;" . $cmd; 

print ">> $cmd\n"; 
passthru($cmd); 

[[email protected] ~]$ php doit.php 
>> FOO=bar;BAR=baz;echo "output=$FOO/$BAR" 
output=bar/baz 
[[email protected] ~]$ 
Cuestiones relacionadas