在PHP中运行控制台程序

时间:2013-09-20 10:58:26

标签: php webserver

我编写了一个简单的PHP代码来执行控制台程序:

<?php
$cmd = escapeshellcmd('progName.exe arg1 arg2 arg3');
exec($cmd);
?>

如果我直接在服务器上运行控制台上的命令,它就可以运行。但是,当我在浏览器上运行PHP时,它不起作用。进程progName.exe正在运行(使用服务器上的任务管理器进行检查),但它永远不会完成。该程序应该从参数计算一些参数并将结果写入二进制文件,并生成.WAV文件。以下是我在浏览器上收到的错误消息:

Error Summary
HTTP Error 500.0 - Internal Server Error
C:\php\php-cgi.exe - The FastCGI process exceeded configured activity timeout

Detailed Error Information
      Module    FastCgiModule
Notification    ExecuteRequestHandler
     Handler    PHP
  Error Code    0x80070102

然后我编写了一个简单的控制台程序,将句子写入文本文件(writeTxt.exe hello.txt)。使用相同的PHP脚本,我在浏览器上运行它,它可以工作。

我已经尝试增加服务器上的超时,但仍然有相同的错误。 什么可能导致这个问题?

1 个答案:

答案 0 :(得分:0)

当您使用exec函数(例如exec('dir'))在PHP中执行程序时,PHP等待它结束您将它发送到后台并且PHP来了直接回复(see documentation,特别是评论)。

根据您发布的PHP源代码($cmd = escapeshellcmd('progName.exe arg1 arg2 arg3');),PHP不会将程序发送到后台 - 所以保留的是progName.exe ...

  1. ...将自己或分叉发送到后台(不太可能,但请查看progName.exe的来源)
  2. ...正在等待输入(&lt; - 这是我的最爱)
  3. 我错过了什么; - )
  4. 正如我所说,我敢打赌这是第二种选择。希望有所帮助。