基本上我的情况如下。
目前在PHP中我按如下方式运行程序:
$cmd = 'cd the_directory/; ./the_program'
system($cmd);
程序运行正常,但是最后的程序说“按Enter键退出...”因此,当程序正在等待用户输入时,Apache无限期地挂起。我们的合作伙伴声明他们已将此程序完美地集成到其后端,并且没有遇到此问题。到目前为止,我在PHP中执行的所有外部程序都退出而不需要用户输入,这似乎是这种情况的标准。
在我看来,代码应该只是没有需要用户输入的结束消息。我错过了什么吗?或者有办法解决这个问题吗?或者他们只是需要更改他们的代码? 谢谢!
答案 0 :(得分:1)
我认为你应该尝试proc_open。
有了它,您不仅可以将外部命令作为进程执行,还可以设置管道以获取和向该进程发送信息。
仔细查看此函数的第三个参数,并研究此函数的PHP手册中的示例,您可以在其中看到如下内容:
fwrite($pipes[0], '<?php print_r($_ENV); ?>');
因此,您可以将所需内容写入刚刚打开的流程的输入管道。
答案 1 :(得分:0)
如果您使用Windows环境:
$run_cmd = "cmd /c c:/app_folder/app.exe";
$WshShell = new COM("WScript.Shell");
$oExec = $WshShell->Run($run_cmd, 0, false);
请注意,后者将导致流程窗口在结束时关闭
如果你使用UNIX(还没有自己测试过):
exec('\app_folder\app &');