(PHP 4 >= 4.3.0, PHP 5, PHP 7)
proc_open — 执锟斤拷一锟斤拷锟斤拷锟筋,锟斤拷锟揭达拷锟斤拷锟斤拷锟斤拷锟斤拷/锟斤拷锟斤拷锟斤拷募锟街革拷搿�
$cmd
, array $descriptorspec
, array &$pipes
[, string $cwd
[, array $env
[, array $other_options
]]] ) : resource锟斤拷锟斤拷 popen() 锟斤拷锟斤拷锟斤拷 锟斤拷锟斤拷 proc_open() 锟结供锟剿革拷锟斤拷强锟斤拷目锟斤拷瞥锟斤拷锟街达拷械锟斤拷锟斤拷锟斤拷锟�
cmd
要执锟叫碉拷锟斤拷锟斤拷
descriptorspec
一锟斤拷锟斤拷锟斤拷锟斤拷锟介。 锟斤拷锟斤拷募锟斤拷锟绞撅拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟皆拷锟街碉拷锟绞� PHP 锟斤拷谓锟斤拷锟叫╋拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷咏锟斤拷獭锟� 0 锟斤拷示锟斤拷准锟斤拷锟诫(stdin锟斤拷锟斤拷1 锟斤拷示锟斤拷准锟斤拷锟斤拷锟絪tdout锟斤拷锟斤拷2 锟斤拷示锟斤拷准锟斤拷锟斤拷stderr锟斤拷锟斤拷
锟斤拷锟斤拷锟叫碉拷元锟截匡拷锟斤拷锟角o拷
STDIN
锟斤拷锟斤拷
锟侥硷拷锟斤拷锟斤拷锟斤拷锟斤拷值锟斤拷锟斤拷锟斤拷 0锟斤拷1 锟斤拷 2锟斤拷锟斤拷锟斤拷锟绞癸拷锟斤拷魏锟斤拷锟叫э拷锟斤拷募锟斤拷锟斤拷锟斤拷锟� 锟斤拷锟斤拷锟戒传锟斤拷锟斤拷锟接斤拷锟教★拷 锟斤拷使锟斤拷锟斤拷慕疟锟斤拷锟斤拷院锟斤拷锟斤拷锟斤拷疟锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟� 锟斤拷锟界,锟斤拷锟斤拷通锟斤拷指锟斤拷锟侥硷拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟皆革拷锟接帮拷全锟侥凤拷式 锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷 PGP锟斤拷GPG 锟斤拷 openssl 锟斤拷锟斤拷 同时也锟斤拷锟皆很凤拷锟斤拷幕锟饺★拷锟叫╋拷锟斤拷锟斤拷状态锟斤拷息锟斤拷
pipes
锟斤拷锟斤拷锟斤拷为锟斤拷锟斤拷锟斤拷锟介, 锟斤拷锟叫碉拷元锟斤拷锟角憋拷执锟叫筹拷锟津创斤拷锟侥管碉拷锟斤拷应锟斤拷 PHP 锟斤拷一锟剿碉拷锟侥硷拷指锟诫。
cwd
要执锟斤拷锟斤拷锟斤拷某锟绞硷拷锟斤拷锟侥柯硷拷锟�
锟斤拷锟斤拷锟斤拷 锟斤拷锟斤拷 路锟斤拷锟斤拷
锟斤拷锟矫此诧拷锟斤拷为 NULL
锟斤拷示使锟斤拷默锟斤拷值锟斤拷锟斤拷前 PHP 锟斤拷锟教的癸拷锟斤拷目录锟斤拷锟斤拷
env
要执锟叫碉拷锟斤拷锟斤拷锟斤拷使锟矫的伙拷锟斤拷锟斤拷锟斤拷锟斤拷
锟斤拷锟矫此诧拷锟斤拷为 NULL
锟斤拷示使锟矫和碉拷前 PHP 锟斤拷锟斤拷锟斤拷同锟侥伙拷锟斤拷锟斤拷锟斤拷锟斤拷
other_options
锟姐还锟斤拷锟斤拷指锟斤拷一些锟斤拷锟斤拷选锟筋。 目前支锟街碉拷选锟斤拷锟斤拷锟斤拷锟�
TRUE
锟斤拷示锟斤拷锟狡憋拷锟斤拷锟斤拷锟斤拷锟斤拷锟侥达拷锟斤拷
TRUE
锟斤拷示锟狡癸拷 cmd.exe shell锟斤拷
锟斤拷锟截憋拷示锟斤拷锟教碉拷锟斤拷源锟斤拷锟酵o拷
锟斤拷使锟斤拷锟斤拷锟街拷锟斤拷锟斤拷锟斤拷 proc_close() 锟斤拷锟斤拷锟斤拷锟截闭达拷锟斤拷源锟斤拷
锟斤拷锟绞э拷埽锟斤拷锟斤拷锟� FALSE
锟斤拷
锟芥本 | 说锟斤拷 |
---|---|
5.2.1 |
为 other_options 锟斤拷锟斤拷锟斤拷锟斤拷 bypass_shell 选锟筋。
|
Example #1 proc_open() 锟斤拷锟斤拷
<?php
$descriptorspec = array(
0 => array("pipe", "r"), // 锟斤拷准锟斤拷锟诫,锟接斤拷锟教从此管碉拷锟叫讹拷取锟斤拷锟斤拷
1 => array("pipe", "w"), // 锟斤拷准锟斤拷锟斤拷锟斤拷咏锟斤拷锟斤拷锟剿管碉拷锟斤拷写锟斤拷锟斤拷锟斤拷
2 => array("file", "/tmp/error-output.txt", "a") // 锟斤拷准锟斤拷锟斤拷写锟诫到一锟斤拷锟侥硷拷
);
$cwd = '/tmp';
$env = array('some_option' => 'aeiou');
$process = proc_open('php', $descriptorspec, $pipes, $cwd, $env);
if (is_resource($process)) {
// $pipes 锟斤拷锟节匡拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟侥o拷
// 0 => 锟斤拷锟斤拷锟斤拷锟接斤拷锟教憋拷准锟斤拷锟斤拷写锟斤拷木锟斤拷
// 1 => 锟斤拷锟皆达拷锟接斤拷锟教憋拷准锟斤拷锟斤拷锟饺★拷木锟斤拷
// 锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟阶凤拷拥锟斤拷募锟� /tmp/error-output.txt
fwrite($pipes[0], '<?php print_r($_ENV); ?>');
fclose($pipes[0]);
echo stream_get_contents($pipes[1]);
fclose($pipes[1]);
// 锟叫记o拷锟节碉拷锟斤拷 proc_close 之前锟截憋拷锟斤拷锟叫的管碉拷锟皆憋拷锟斤拷锟斤拷锟斤拷锟斤拷
$return_value = proc_close($process);
echo "command returned $return_value\n";
}
?>
锟斤拷锟斤拷锟斤拷锟教碉拷锟斤拷锟斤拷锟斤拷锟斤拷冢锟�
Array ( [some_option] => aeiou [PWD] => /tmp [SHLVL] => 1 [_] => /usr/local/bin/php ) command returned 0
Note:
Windows 锟斤拷锟斤拷锟皆o拷锟斤拷锟斤拷 2 锟斤拷锟斤拷锟斤拷锟斤拷也锟斤拷锟斤拷锟斤拷为锟缴继承的撅拷锟斤拷锟斤拷偷锟斤拷咏锟斤拷獭锟� 锟斤拷锟角o拷锟斤拷锟斤拷 Windows 锟侥架癸拷锟斤拷锟斤拷锟斤拷锟侥硷拷锟斤拷锟斤拷锟斤拷锟酵底诧拷锟斤拷锟斤拷锟叫癸拷锟斤拷锟斤拷 锟斤拷锟皆o拷锟接斤拷锟斤拷锟睫凤拷锟斤拷锟斤拷锟斤拷锟斤拷锟侥撅拷锟斤拷锟� 锟斤拷准锟斤拷锟诫,锟斤拷准锟斤拷锟斤拷捅锟阶拷锟斤拷锟结按锟斤拷预锟节癸拷锟斤拷锟斤拷
Note:
锟斤拷锟斤拷锟街伙拷锟揭拷锟斤拷锟侥斤拷锟教管碉拷锟斤拷 使锟斤拷 popen() 锟斤拷锟斤拷锟斤拷锟斤拷蛹虻ァ锟�