2

通常,您会想要隐藏 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为初始化环境的小脚本/批处理/程序,因此在弹出窗口出现后我可以执行程序很重要。

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

4

2 回答 2

2

我回答这个问题有点晚了,但为了帮助解决这个问题,这是我的回答。

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

于 2011-07-24T14:26:53.360 回答
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() 方法一一发出,这样您还可以处理返回和任何异常。

于 2016-11-01T16:25:01.770 回答