我有一个使用passthru()来运行命令的脚本。我需要在运行此命令之前设置一些shell环境变量,否则将无法找到它的库。
我尝试了以下内容:
putenv("LD_LIBRARY_PATH=/path/to/lib");
passthru($cmd);
使用putenv()似乎不会传播到我正在运行的命令。它无法说它找不到它的库。当我在bash中运行export LD_LIBRARY_PATH=/path/to/lib
时,它运行正常。
我也尝试了以下(徒劳):
exec("export LD_LIBRARY_PATH=/path/to/lib");
passthru($cmd);
如何从PHP设置shell变量,该变量传播到我的PHP脚本的子进程?
我是否仅限于检查当前环境中是否存在变量并要求用户手动设置它?
答案 0 :(得分:5)
我不是100%熟悉PHP的exec如何工作,但你尝试过:exec("LD_LIBRARY_PATH=/path/to/lib $cmd")
我知道这适用于大多数shell,但我不确定PHP是如何做事的。
编辑:假设这是有效的,处理多个变量只需用空格分隔:
exec("VAR1=val1 VAR2=val2 LD_LIBRARY_PATH=/path/to/lib $cmd")
答案 1 :(得分:2)
您可以将变量分配前置为$ 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 ~]$
答案 2 :(得分:1)
有几件事情浮现在脑海中。一个是$ cmd是一个脚本,它包含运行实际程序之前的环境变量设置。
另一个想法是:我知道你可以定义一个变量并在同一行上运行一个程序,例如:
DISPLAY=host:0.0 xclock
但我不知道在passthru