GNU/Linux >> Belajar Linux >  >> Linux

Cara memeriksa apakah ada perintah shell dari PHP

Windows menggunakan where , sistem UNIX which untuk memungkinkan untuk melokalkan perintah. Keduanya akan mengembalikan string kosong di STDOUT jika perintah tidak ditemukan.

PHP_OS saat ini WINNT untuk setiap versi Windows yang didukung oleh PHP.

Jadi, inilah solusi portabel:

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

Di Linux/Mac OS Coba ini:

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

Kemudian gunakan dalam kode:

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

Perbarui: Seperti yang disarankan oleh @camilo-martin, Anda cukup menggunakan:

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

Berdasarkan @jcubic dan 'yang' harus dihindari, ini adalah lintas platform yang saya buat:

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. Cara Membuat Daftar Modul yang Dimuat atau Diaktifkan di PHP dari baris perintah

  2. Cara memeriksa versi Ubuntu dari baris perintah

  3. Bagaimana saya bisa memeriksa file yang ada dan menjalankan perintah jika tidak?

  1. Cara memeriksa apakah grup ada dan menambahkan jika tidak ada di Linux Shell Script

  2. Bagaimana cara menjalankan perintah shell eksternal dari pengontrol laravel?

  3. Bagaimana cara menjalankan perintah Vim dari shell?

  1. Cara Memeriksa Apakah Sistem Linux 32 bit Atau 64 Bit

  2. Bagaimana cara Menghapus baris 'n' Pertama/Terakhir dari output perintah di Shell?

  3. Bagaimana cara memeriksa apakah stdin /dev/null dari shell?