通常,您希望隐藏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
替换一个初始化环境的小脚本/批处理/程序,因此在弹出窗口显示后执行程序非常重要。
(这主要用于教育目的,不会投入生产。)
答案 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()方法逐个发出命令,这样您也可以处理返回和任何异常。