экспортировать переменную среды оболочки перед запуском команды из скрипта PHP CLI

У меня есть сценарий, который использует 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-скрипта?

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

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

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

EDIT: Предполагая, что это работает, для работы с несколькими переменными просто отделяйте их пробелом:

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

Вы могли бы просто добавить свои переменные назначения в $ 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 ~]$ 

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

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

 DISPLAY=host:0.0 xclock 

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

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