如何检查PHP是否存在shell命令
我在php中需要这样的东西:
If (!command_exists('makemiracle')) {
print 'no miracles';
return FALSE;
}
else {
// safely call the command knowing that it exists in the host system
shell_exec('makemiracle');
}
有没有解决方案?
在Linux / Mac OS上试试这个:
function command_exist($cmd) {
$return = shell_exec(sprintf("which %s", escapeshellarg($cmd)));
return !empty($return);
}
然后在代码中使用它:
if (!command_exist('makemiracle')) {
print 'no miracles';
} else {
shell_exec('makemiracle');
}
更新:根据@ camilo-martin的建议,你可以简单地使用:
if (`which makemiracle`) {
shell_exec('makemiracle');
}
Windows使用where
,UNIX系统, which
允许本地化的命令。 如果找不到命令,两者都会在STDOUT中返回一个空字符串。
PHP_OS目前每个受支持的Windows版本都是WINNT。
所以这里有一个便携式解决
/**
* 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;
}
你可以使用is_executable来检查它是否可执行,但你需要知道命令的路径,你可以使用which
命令来获取它。