如何检查PHP是否存在shell命令

我在php中需要这样的东西:

If (!command_exists('makemiracle')) {
  print 'no miracles';
  return FALSE;
}
else {
  // safely call the command knowing that it exists in the host system
  shell_exec('makemiracle');
}

有没有解决方案?


在Linux / Mac OS上试试这个:

function command_exist($cmd) {
    $return = shell_exec(sprintf("which %s", escapeshellarg($cmd)));
    return !empty($return);
}

然后在代码中使用它:

if (!command_exist('makemiracle')) {
    print 'no miracles';
} else {
    shell_exec('makemiracle');
}

更新:根据@ camilo-martin的建议,你可以简单地使用:

if (`which makemiracle`) {
    shell_exec('makemiracle');
}

Windows使用where ,UNIX系统, which允许本地化的命令。 如果找不到命令,两者都会在STDOUT中返回一个空字符串。

PHP_OS目前每个受支持的Windows版本都是WINNT。

所以这里有一个便携式解决

/**
 * Determines if a command exists on the current environment
 *
 * @param string $command The command to check
 * @return bool True if the command has been found ; otherwise, false.
 */
function command_exists ($command) {
  $whereIsCommand = (PHP_OS == 'WINNT') ? 'where' : 'which';

  $process = proc_open(
    "$whereIsCommand $command",
    array(
      0 => array("pipe", "r"), //STDIN
      1 => array("pipe", "w"), //STDOUT
      2 => array("pipe", "w"), //STDERR
    ),
    $pipes
  );
  if ($process !== false) {
    $stdout = stream_get_contents($pipes[1]);
    $stderr = stream_get_contents($pipes[2]);
    fclose($pipes[1]);
    fclose($pipes[2]);
    proc_close($process);

    return $stdout != '';
  }

  return false;
}

你可以使用is_executable来检查它是否可执行,但你需要知道命令的路径,你可以使用which命令来获取它。

链接地址: http://www.djcxy.com/p/57065.html

上一篇: How to check if a shell command exists from PHP

下一篇: Detect if executable file is on user's PATH