在 PHP 中运行控制台程序


Running console program in PHP

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

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

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

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

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

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