PHP shell_exec 不适用于两个不同的应用程序版本

PHP shell_exec does not work for two different app version

我遇到了一个有趣的奇怪问题 shell_exec...

描述

我开发了 PHP Web 应用程序,该应用程序使用 C++ 后端应用程序进行计算。服务器在 linux 上 运行ning,我使用 shell_exec 执行 C++ 程序。我更新了我的 C++ 应用程序版本,此后 shell_exec 不起作用,但是

问题

你遇到过类似的问题吗?

是否有可能在 shell_exec 中出现问题,而在从控制台标准执行期间不会出现问题?

一段PHP代码

class LauncherManager extends Nette\Object {

  private $wwwDir;
  private $db;
  private $f;

  public function __construct($wwwDir, \DibiConnection $db) {
    $this->wwwDir = $wwwDir;
    $this->db = $db;
    $this->f = (new Dao\DaoFactory())->setDb($db);
  }

  public function execMeasurement($measurementId) {
    $this->execGenetrac(" -m $measurementId");
  }

  public function execSamples($analysisId) {
    $this->execGenetrac(" -s $analysisId");
  }

  public function execAnalysis($analysisId) {
    $this->execGenetrac(" -a $analysisId");
  }  

  public function execGenetrac($params) {

    // Check path to genetrac can be set
    $path = $this->wwwDir . "/genetrac";
    $this->checkPathExist($path);

    // Check library path 
    $lib = './lib';
    $expl = 'export LD_LIBRARY_PATH="' . $lib . '"';
    $this->checkPathExist($path . "/" . $lib);

    // Check genetrac executable exist
    $this->checkPathExist($path . "/genetrac");

    // Launch genetrac with parameters
    $this->exec("cd $path; $expl; ./genetrac $params");
  }

  public function exec($command) {
    return shell_exec($command);
  }

  ...

shell_exec returns NULL 两种情况:

  • 发生错误
  • 执行程序returns无输出

为了区分这些情况,请改用exec()

public function exec($command) {
    exec($command, $arrOutputLines, $intReturnStatus);
    return join("", $arrOutputLines);
}

您可以通过 var_dump'ing $arrOutputLines 和 $intReturnStatus 调试此代码(这些是您的程序打印出的行数组和程序的数字退出状态(0 通常表示正常,非-0 表示错误)).