is_executable() 不检查 PATH 环境变量,因此如果您的当前工作目录是 /dir/ 并且您的 PATH env 中有 /bin/ 并且文件 /bin/ffmpeg 存在,那么您仍然可以运行 shell_exec("ffmpeg"),但 is_executable("ffmpeg") 将返回 false。
如果您正在寻找一个也考虑 PATH 环境变量的 is_executable 版本,请尝试以下操作
<?php
function is_executable_pathenv(string $filename): bool
{
if (is_executable($filename)) {
return true;
}
if ($filename !== basename($filename)) {
return false;
}
$paths = explode(PATH_SEPARATOR, getenv("PATH"));
foreach ($paths as $path) {
if (is_executable($path . DIRECTORY_SEPARATOR . $filename)) {
return true;
}
}
return false;
}