2012-04-30 4 views
0

Я пытаюсь запустить процессы с использованием функции proc_open(). Как указано на странице - я предоставил переменные настраиваемой среды и попытался распечатать. Он показывает все мои переменные + всегда 3 переменные: «SHLVL», «PWD», «_ =». Я хотел бы печатать/использовать только мои переменные среды среды. Эти 3 всегда присутствуют с этой функцией? Есть ли способ иметь только предоставленные переменные? Все это под Linux и PHP5.PHP переменные среды proc_open

//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); 

} 

Спасибо.

ответ

0

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

0

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

+0

Я не понимаю, почему у вас есть *, чтобы открыть оболочку, но если вы делаете *, то вокруг нее нет никакого способа. –

+0

Это ... не ... вызывает оболочку в любом месте ... –

+0

И? Он все равно не вызывает оболочку в любом месте. –

0

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

Смежные вопросы