基本上我的情况如下。
- 上传文件
- 对文件运行外部进程(生成另一个文件)
- 当外部进程关闭时,处理生成的文件。
目前在PHP中,我按如下方式运行程序:
$cmd = 'cd the_directory/; ./the_program'
system($cmd);
程序运行良好,一切正常,但最后的程序说"按回车退出......"因此,Apache无限期地挂起,因为该程序正在等待用户输入。我们的合作伙伴声明,他们已将此程序完美地集成到其后端中,并且没有遇到此问题。到目前为止,我在PHP中执行的所有外部程序都退出,而无需用户输入,这似乎是这种情况的常态。
在我看来,代码不应该有需要用户输入的最终消息。我错过了什么吗?或者有没有办法解决这个问题?还是他们只需要更改代码?谢谢!
我认为你应该尝试proc_open。
有了它,您不仅可以将外部命令作为进程执行,还可以设置管道来获取信息并将其发送到该进程。
仔细看看这个函数的第三个参数,并研究这个函数的 PHP 手册中的例子,你可以看到这样的东西:
fwrite($pipes[0], '<?php print_r($_ENV); ?>');
因此,您可以将所需的内容写入刚刚打开的进程的输入管道。
如果您使用 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 &');