GNU/Linux >> Linux Esercitazione >  >> Linux

Come verificare se esiste un comando shell da PHP

Windows usa where , sistemi UNIX which per consentire di localizzare un comando. Entrambi restituiranno una stringa vuota in STDOUT se il comando non viene trovato.

PHP_OS è attualmente WINNT per ogni versione di Windows supportata da PHP.

Quindi ecco una soluzione portatile:

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

Su Linux/Mac OS Prova questo:

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

Quindi usalo nel codice:

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

Aggiornamento: Come suggerito da @camilo-martin potresti semplicemente usare:

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

Basato su @jcubic e su quel "che" dovrebbe essere evitato, questa è la multipiattaforma che ho ideato:

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. Come verificare se un sistema Linux è a 32 o 64 bit

  2. Come eliminare le prime / ultime "n" righe dall'output del comando in Shell?

  3. Come recuperare un lavoro in background da una shell precedente??

  4. Come eseguire il downgrade di PHP da 5.3.x a 5.2.x?

  5. Come posso verificare che un file esista ed eseguire un comando in caso contrario?

Come eseguire un comando Shell con Python

Come controllare i dettagli meteorologici dalla riga di comando in Linux

Come controllare le statistiche di rete Linux dalla riga di comando

Come verificare se esiste un file o una directory in Bash Shell

Come eseguire un comando in uno script della shell?

Come controllare l'utilizzo di Inode da cPanel e dalla riga di comando?