检查“exec”是否被禁用

时间:2010-10-14 22:31:09

标签: php exec

我可以使用PHP中的任何函数来检测exec函数是否可用吗?

5 个答案:

答案 0 :(得分:40)

<?php
function exec_enabled() {
  $disabled = explode(',', ini_get('disable_functions'));
  return !in_array('exec', $disabled);
}
?>

编辑:根据Ziagl的评论修正了爆炸。

答案 1 :(得分:13)

以下功能更强大。它处理函数名之间有0个或更多空格的disabled_functions值,检查suhosin补丁的黑名单设置,覆盖safe_mode,并存储答案以供将来参考。

function is_exec_available() {
    static $available;

    if (!isset($available)) {
        $available = true;
        if (ini_get('safe_mode')) {
            $available = false;
        } else {
            $d = ini_get('disable_functions');
            $s = ini_get('suhosin.executor.func.blacklist');
            if ("$d$s") {
                $array = preg_split('/,\s*/', "$d,$s");
                if (in_array('exec', $array)) {
                    $available = false;
                }
            }
        }
    }

    return $available;
}

答案 2 :(得分:2)

您可以搜索disable_functions功能的ini设置exec()

if( false !== strpos(ini_get("disable_functions"), "exec") ) {
 // exec() is disabled

为了完整起见,请注意PHP Safe Mode也对该功能施加了一些限制。

答案 3 :(得分:1)

如果安装了safe_mode,则还需要检查safe_mode是否处于活动状态,因为exec不可用

function is_exec_available() {

    // Are we in Safe Mode
    if ( $safe_mode = ini_get( 'safe_mode' ) && strtolower( $safe_mode ) != 'off' )
        return false;

    // Is shell_exec disabled?
    if ( in_array( 'exec', array_map( 'trim', explode( ',', ini_get( 'disable_functions' ) ) ) ) )
        return false;

    return true;

}

答案 4 :(得分:0)

使用在各种SO帖子上找到的一些技术,安全模式,功能存在和禁用exec的单行编译。

这将在尝试运行之前检查exec是否可用并已启用。如果运行exec()并且该函数不存在或被禁用,则会生成警告。取决于可能呈现给浏览器的服务器设置,并且几乎总是将一行写入日志文件=性能命中。

// Exec function exists.
// Exec is not disabled.
// Safe Mode is not on.
$exec_enabled =
     function_exists('exec')                                            &&
     !in_array('exec', array_map('trim',explode(', ', ini_get('disable_functions'))))     &&
              !(strtolower( ini_get( 'safe_mode' ) ) != 'off')
     ;


if ($exec_enabled) { exec('blah'); }