GNU/Linux >> Znalost Linux >  >> Linux

Jak zkontrolovat, zda existuje příkaz shellu z PHP

Windows používá where , UNIXové systémy which umožňující lokalizaci příkazu. Pokud příkaz nebude nalezen, oba vrátí prázdný řetězec ve STDOUT.

PHP_OS je aktuálně WINNT pro každou podporovanou verzi Windows pomocí PHP.

Takže tady je přenosné řešení:

/**
 * 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;
}

V systému Linux/Mac OS Zkuste toto:

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

Poté jej použijte v kódu:

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

Aktualizace: Jak navrhuje @camilo-martin, můžete jednoduše použít:

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

Na základě @jcubic a toho, čemu je třeba se vyhnout, toto je křížová platforma, se kterou jsem přišel:

function verifyCommand($command) :bool {
  $windows = strpos(PHP_OS, 'WIN') === 0;
  $test = $windows ? 'where' : 'command -v';
  return is_executable(trim(shell_exec("$test $command")));
}

Linux
  1. Jak zobrazit seznam modulů načtených nebo povolených v PHP z příkazového řádku

  2. Jak odstranit první/poslední „n“ řádky z výstupu příkazu v prostředí Shell?

  3. Jak obnovit práci na pozadí z předchozího shellu?

  1. Jak mohu zkontrolovat, zda soubor existuje, a provést příkaz, pokud ne?

  2. Jak mohu spustit kód PHP z příkazového řádku?

  3. Jak zkontrolovat, zda skupina existuje, a přidat, pokud ne, v Linux Shell Script

  1. Jak zkontrolovat, zda je systém Linux 32bitový nebo 64bitový

  2. Jak downgradovat PHP z 5.3.x na 5.2.x?

  3. Jak spustit příkaz Vim z shellu?