GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo verificar si existe un comando de shell desde PHP

Windows usa where , sistemas UNIX which para permitir localizar un comando. Ambos devolverán una cadena vacía en STDOUT si no se encuentra el comando.

PHP_OS actualmente es WINNT para todas las versiones de Windows compatibles con PHP.

Así que aquí una solución portátil:

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

En Linux/Mac OS Prueba esto:

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

Luego úsalo en el código:

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

Actualización: Como sugirió @camilo-martin, simplemente podría usar:

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

Basado en @jcubic y ese 'que' debe evitarse, esta es la plataforma cruzada que se me ocurrió:

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. Cómo comprobar si un sistema Linux es de 32 o 64 bits

  2. ¿Cómo eliminar las primeras/últimas líneas 'n' de la salida del comando en Shell?

  3. ¿Cómo recuperar un trabajo en segundo plano de un shell anterior?

  4. ¿Cómo puedo ejecutar código PHP desde la línea de comandos?

  5. Cómo verificar si existe un grupo y agregarlo si no existe en Linux Shell Script

Cómo ejecutar un comando de Shell con Python

Cómo verificar los detalles del clima desde la línea de comandos en Linux

Cómo comprobar las estadísticas de red de Linux desde la línea de comandos

Cómo verificar si existe un archivo o directorio en Bash Shell

¿Cómo ejecutar un comando en un script de Shell?

¿Cómo verificar el uso de Inode desde cPanel y la línea de comandos?