PHP显示CMD命令提示符窗口(Windows)

时间:2011-05-30 14:48:13

标签: php windows window cmd proc-open

通常,您希望隐藏CMD窗口。 就我而言,我将使用PHP + CLI进行一些测试。 如果可以使用PHP来启动CLI弹出窗口,这将非常有用。 但是,唉,我找不到办法去做。

以下命令应该可以使它工作,但它不会:

START "PHP AE2" CMD /K DIR

有问题的PHP代码基于proc_open()

$proc=proc_open($cmd,array(
    0=>array('pipe','r'), // STDIN
    1=>array('pipe','w'), // STDOUT
    2=>array('pipe','w')  // STDERR
),$pipes);
// ....some stream stuff....
$return=proc_close($proc);

虽然命令运行正常,但弹出窗口不会显示。我怀疑这是Apache的一个功能。有没有办法将CMD与其父母完全分离?

此外,我将用DIR替换一个初始化环境的小脚本/批处理/程序,因此在弹出窗口显示后执行程序非常重要。

(这主要用于教育目的,不会投入生产。)

2 个答案:

答案 0 :(得分:2)

我回答这个问题有点迟了,但是在这里帮助解决这个问题是我的答案。

该命令是正确的,但您需要让Apache与桌面交互。如果你在Windows机器上,只需转到服务,找到Apache并确保勾选“允许服务与桌面交互”复选框。

答案 1 :(得分:0)

这是一个允许PHP获取动态与真实cmd终端进行交互的项目。在此处获取:https://github.com/merlinthemagic/MTS

下载后,您只需使用以下代码:

//if you prefer Powershell, replace 'cmd' with 'powershell'
$shellObj    = \MTS\Factories::getDevices()->getLocalHost()->getShell('cmd');

//you might need to ad php to the system environment variable
$strCmd1   = 'START "seq" cmd /c "PHP AE2"';
$return1   = $shellObj->exeCmd($strCmd1);

您可以针对$ shellObj发出任何您喜欢的命令,在PHP脚本的整个生命周期内都会维护该环境。因此,不是在脚本文件中捆绑命令,而是使用exeCmd()方法逐个发出命令,这样您也可以处理返回和任何异常。