Переменные среды PHP 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 ответа

Решение

Вы можете именовать пространство переменных вашей среды, например, PHP_MYVAR вместо MYVAR, Таким образом, вы можете фильтровать на основе общего префикса PHP_,

Эти три переменные создаются оболочкой. Если вы не откроете оболочку, они не будут созданы.

Это было просто связано с Linux. Работает так, как и предполагалось под Solaris. Я добавил фильтр регулярных выражений, чтобы удалить эти дополнительные переменные.

Другие вопросы по тегам