PHP运行外部程序,Apache挂起


PHP running external program, Apache hangs

基本上我的情况如下。

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

目前在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 &');