0

我写了一个简单的 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 脚本,我在浏览器上运行它并且它可以工作。

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

4

1 回答 1

0

exec当您在 PHP 中使用该函数(例如)执行程序时exec('dir'),PHP 会一直等到它结束将其发送到后台,然后 PHP 会直接返回(请参阅文档,尤其是注释)。

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

  1. ...将自己或叉子发送到后台(不太可能,但请查看 的来源progName.exe
  2. ...正在等待输入(<-- 这是我最喜欢的)
  3. 我错过了一些东西;-)

正如我所说,我敢打赌这是第二种选择。希望能有所帮助。

于 2013-09-20T11:29:34.797 回答