2012-04-30 10 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

あなたの環境変数に名前を付けることができます。 MYVARの代わりにPHP_MYVARです。このようにして、共通プレフィックスPHP_に基づいてフィルタリングすることができます。

0

これら3つの変数は、シェルによって作成されます。シェルを開かないと、シェルは作成されません。

+0

シェルを開く理由が分かりませんが、もしあなたが* do *していれば、周囲には道がありません。 –

+0

これは...どこにでもシェルを呼び出す... –

+0

そして?それはまだどこでもシェルを起動しません。 –

0

これはちょうどLinuxに関連していました。 Solarisの下で動作するように動作します。これらの余分な変数を削除する正規表現フィルタを追加しました。