如何测试是否允许PHP system()函数?并且出于安全原因没有关闭

hal*_*erd 5 php system exec

我想知道如何测试服务器上是否允许system()或exec().我一直收到此错误"警告:出于安全原因,exec()已被禁用..."

我知道safe_mode函数在我的提供程序运行的php版本中被折旧(5.3.3)所以我不能使用get_ini('safe_mode')检查.

还有什么可做的?

我用它作为备份脚本.如果提供者允许系统,则脚本会生成一个tar文件,并在用户登录时将其邮寄给我.

提前致谢.

irc*_*ell 10

嗯,只有两种方法可以被禁用: safe_modedisable_functions.

所以你可以做一个检查:

function isAvailable($func) {
    if (ini_get('safe_mode')) return false;
    $disabled = ini_get('disable_functions');
    if ($disabled) {
        $disabled = explode(',', $disabled);
        $disabled = array_map('trim', $disabled);
        return !in_array($func, $disabled);
    }
    return true;
}
Run Code Online (Sandbox Code Playgroud)

哦,并且function_exists应该返回true,因为它是一个核心函数(否则你可能会伪造核心函数并对主机造成一些真正的破坏)......因此is_callable也应该返回true(因为函数确实存在).因此,唯一的方法是检查ini设置,或实际调用它...

编辑:另外需要注意的是,有几种方法可以执行shell命令.查看: