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")));
}
Nakonfigurujte a sestavte OpenCV na vlastní instalaci FFMPEG
CURL pro přístup na stránku, která vyžaduje přihlášení z jiné stránky