экспортировать переменную среды оболочки перед запуском команды из скрипта PHP CLI - PullRequest
7 голосов
/ 09 марта 2012

У меня есть скрипт, который использует passthru () для запуска команды. Мне нужно установить некоторые переменные среды оболочки перед запуском этой команды, иначе она не сможет найти свои библиотеки.

Я пробовал следующее:

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

Использование putenv () не распространяется на команду, которую я запускаю. Он не говорит, что не может найти библиотеки. Когда я запускаю export LD_LIBRARY_PATH=/path/to/lib в bash, он работает нормально.

Я также попробовал следующее (напрасно):

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

Как установить переменную оболочки из PHP, которая распространяется на дочерние процессы моего сценария PHP?

Могу ли я проверить, не существует ли переменная в текущей среде, и попросить пользователя установить ее вручную?

Ответы [ 3 ]

5 голосов
/ 09 марта 2012

Я не на 100% знаком с тем, как работает exec PHP, но вы пробовали: exec("LD_LIBRARY_PATH=/path/to/lib $cmd")

Я знаю, что это работает в большинстве оболочек, но я не уверен, как PHP работает.

РЕДАКТИРОВАТЬ: Предполагая, что это работает, для работы с несколькими переменными просто разделить их пробелом:

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

2 голосов
/ 09 марта 2012

Вы можете просто добавить свои переменные в $ cmd.

[ghoti@pc ~]$ cat doit.php 
<?php

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

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

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

[ghoti@pc ~]$ php doit.php 
>> FOO=bar;BAR=baz;echo "output=$FOO/$BAR"
output=bar/baz
[ghoti@pc ~]$ 
1 голос
/ 09 марта 2012

Несколько вещей приходят на ум.Во-первых, $ cmd должен быть сценарием, который включает настройку переменной среды перед запуском реальной программы.

Другая мысль заключается в следующем: я знаю, что вы можете определить переменную и запустить программу в одной строке, например:

DISPLAY=host:0.0 xclock

, но я не знаю, работает ли это вконтекст passthru

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

...