PHP proc_open环境变量

时间:2012-04-30 04:53:34

标签: php linux environment-variables process proc-open

我正在尝试使用proc_open()函数运行进程。如页面上指定的那样 - 我提供了自定义环境变量并尝试打印出来。它显示了我提供的所有变量+总是3个变量:'SHLVL','PWD','_ ='。我想打印/仅使用我提供的环境变量。这3个功能总是存在吗?有没有办法只提供变量?这完全在Linux和PHP5下。

//Here is the code to clarify : 
$descriptorspec = array(
0 => array("pipe", "r"),  // stdin is a pipe that the child will read from
1 => array("pipe", "w"),  // stdout is a pipe that the child will write to
2 => array("file", "/tmp/error-output.txt", "a") // stderr is a file to write to
);

$env = array('MY_VAR' => 'FOO');

$process = proc_open('./run.php', $descriptorspec, $pipes, $cwd, $env);

if (is_resource($process)) {

fwrite($pipes[0], escapeshellcmd($args));
fclose($pipes[0]);

$output = "";
while (!feof($pipes[1])) {
    $output .= fgets($pipes[1]);
}

print "Output is $output \n";
    fclose($pipes[1]);
    $return_value = proc_close($process);

}

感谢。

3 个答案:

答案 0 :(得分:0)

您可以命名您的环境变量,例如PHP_MYVAR代替MYVAR。这样您就可以根据公共前缀PHP_进行过滤。

答案 1 :(得分:0)

这三个变量是由shell创建的。如果您不打开shell,则不会创建它们。

答案 2 :(得分:0)

它与Linux有关。它的工作原理应该在Solaris下。我添加了正则表达式过滤器来删除那些额外的变量。