PHP - 如何保持命令Shell打开以执行多个命令?

时间:2014-10-17 09:45:51

标签: php shell process

您好我正在尝试在Windows机器上使用PHP执行多个命令。我试过这段代码:

<?php
$output= shell_exec("powershell.exe");
$output2= shell_exec("write-host gokul");
shell_exec("exit");
echo( '<pre>' );
echo( $output );
echo( $output2 );
echo( '</pre>' );
?>

PHP使用新shell执行每个命令,并在完成时关闭它!

据我所知,每个'shell_exec'都会创建一个新的shell,控件会等待命令执行完成。我如何创建一个在后台保持打开的shell,直到我关闭它?

我不确定'proc_open'或'popen'是否可以提供帮助?

更新 当我尝试PROC_OPEN()

$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", "error.txt", "a") // stderr is a file to write to
);    
$process = proc_open('cmd.exe', $descriptorspec, $pipes);

if (is_resource($process)) {
    fwrite($pipes[0], 'dir');
    fwrite($pipes[0], 'powershell.exe');
    fwrite($pipes[0], 'write-host gokul');
    fclose($pipes[0]);

    echo stream_get_contents($pipes[1]);
    fclose($pipes[1]);

    proc_close($process);
}

仅打印提示。我真的可以使用proc_open来执行多个命令吗?如果是这样,怎么样?

Microsoft Windows [Version 6.1.7601] Copyright (c) 2009 Microsoft Corporation. All rights reserved. C:\wamp\bin\apache\Apache2.2.17>More?

1 个答案:

答案 0 :(得分:2)

使用proc_open是正确的尝试,但您需要使用新的行字符完成每个命令。就像你在shell会话中手动输入命令一样。

它应该是这样的:

fwrite($pipes[0], 'dir' . PHP_EOL);
fwrite($pipes[0], 'powershell.exe' . PHP_EOL);
fwrite($pipes[0], 'write-host gokul' . PHP_EOL);