GNU/Linux >> Tutoriels Linux >  >> Linux

Comment vérifier si une commande shell existe depuis PHP

Windows utilise where , systèmes UNIX which pour permettre de localiser une commande. Les deux renverront une chaîne vide dans STDOUT si la commande n'est pas trouvée.

PHP_OS est actuellement WINNT pour chaque version de Windows prise en charge par PHP.

Alors voici une solution portable :

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

Sous Linux/Mac OS Essayez ceci :

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

Utilisez-le ensuite dans le code :

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

Mise à jour : Comme suggéré par @camilo-martin, vous pouvez simplement utiliser :

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

Basé sur @jcubic et ce "qui" devrait être évité, voici la plate-forme croisée que j'ai imaginée :

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. Comment vérifier si un système Linux est 32 bits ou 64 bits

  2. Comment lister les modules chargés ou activés en PHP à partir de la ligne de commande

  3. Comment supprimer les premières/dernières lignes 'n' de la sortie de la commande dans Shell ?

  4. Comment exécuter des commandes shell externes à partir du contrôleur laravel ?

  5. Comment exécuter la commande Vim depuis le shell ?

Comment exécuter une commande Shell avec Python

Comment vérifier les détails météorologiques à partir de la ligne de commande sous Linux

Comment vérifier les statistiques du réseau Linux à partir de la ligne de commande

Comment vérifier si un fichier ou un répertoire existe dans Bash Shell

Comment exécuter une commande dans un script shell ?

Comment vérifier l'utilisation d'Inode à partir de cPanel et de la ligne de commande ?