2012-03-09 4 views
6

Ho uno script che utilizza passthru() per eseguire un comando. Ho bisogno di impostare alcune variabili di ambiente shell prima di eseguire questo comando, altrimenti non riuscirà a trovare le sue librerie.esportare la variabile di ambiente della shell prima di eseguire il comando dallo script CLI di PHP

ho provato la seguente:

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

Utilizzando putenv() non sembra propagarsi al comando sto correndo. Fallisce dicendo che non riesce a trovarlo nelle librerie. Quando eseguo export LD_LIBRARY_PATH=/path/to/lib in bash, funziona correttamente.

Ho anche provato il seguente (invano):

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

Come posso impostare una variabile di shell da PHP, che si propaga ai processi figli del mio script PHP?

Sono limitato a controllare se una variabile non esiste nell'ambiente corrente e chiede all'utente di impostarla manualmente?

+0

possibile duplicato di http://stackoverflow.com/questions/2002970/export-a-variable-from-php-to-shell – Electronick

+0

ho letto questa domanda, questo è simile, ma se lo si legge , Sto chiedendo come ottenere qualcosa di diverso. –

risposta

5

io non sono a conoscenza di 100% con come funziona l'exec di PHP, ma hai provato: exec("LD_LIBRARY_PATH=/path/to/lib $cmd")

So che questo funziona nella maggior parte dei gusci ma non sono sicuro di come PHP fare le cose.

EDIT: Supponendo che questo sta lavorando, a che fare con più variabili appena li separano da uno spazio:

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

+0

E se ho più di una variabile? 'MYVAR = valore; LD_LIBRARY_PATH =/percorso/a/lib $ cmd'? –

+1

no punto e virgola, solo uno spazio – klaustopher

+0

sembra, almeno secondo il link ubuntu che ho postato, anche se non l'ho mai fatto, – dldnh

1

Un paio di cose mi vengono in mente. Uno è per $ cmd uno script che include l'impostazione della variabile d'ambiente prima di eseguire il programma vero e proprio.

Un altro pensiero è questo: So che si può definire una variabile ed eseguire un programma sulla stessa linea, come ad esempio:

DISPLAY=host:0.0 xclock 

ma non so se che il lavoro nel contesto di passthru

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

+0

$ cmd è in realtà un comando per eseguire un file di build ant, questo script avvolge la costruzione di quel comando. –

2

Si potrebbe semplicemente anteporre le assegnazioni delle variabili 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] ~]$