3

基本上我的情况如下。

  1. 上传文件
  2. 在文件上运行外部进程(生成另一个文件)
  3. 当外部进程关闭时,处理生成的文件。

目前在 PHP 中,我运行程序如下:

$cmd = 'cd the_directory/; ./the_program'
system($cmd);

该程序运行良好,一切正常,但程序最后说“按 Enter 退出...”因此 Apache 无限期挂起,因为该程序正在等待用户输入。我们的合作伙伴声明他们已将这个程序完美地集成到他们的后端,并且没有遇到这个问题。到目前为止,我在 PHP 中执行的所有外部程序都无需用户输入即可退出,这似乎是这种情况的常态。

在我看来,代码不应该只是没有需要用户输入的结束消息。我错过了什么吗?或者有没有办法解决这个问题?还是他们只需要更改代码?谢谢!

4

2 回答 2

1

我认为您应该尝试proc_open

有了它,您不仅可以将外部命令作为进程执行,还可以设置管道来获取和发送信息到该进程。

仔细看看这个函数的第三个参数,研究一下这个函数的 PHP 手册中的例子,你可以看到这样的东西:

fwrite($pipes[0], '<?php print_r($_ENV); ?>');

因此,您可以将所需的内容写入刚刚打开的进程的输入管道。

于 2012-04-22T20:45:43.463 回答
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 &');
于 2012-04-22T20:51:04.597 回答