PHP运行外部程序,Apache挂起

时间:2012-04-22 20:40:26

标签: php apache external-process

基本上我的情况如下。

  1. 上传文件
  2. 在文件上运行外部进程(生成另一个文件)
  3. 当外部进程关闭时,处理生成的文件。
  4. 目前在PHP中我按如下方式运行程序:

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

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

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

2 个答案:

答案 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 &');