代码之家  ›  专栏  ›  技术社区  ›  esqew

检查“exec”是否被禁用[重复]

  •  20
  • esqew  · 技术社区  · 14 年前

    这个问题已经有了答案:

    PHP中是否有任何函数可用于检测 exec 功能是否可用?

    5 回复  |  直到 11 年前
        1
  •  40
  •   Brent    11 年前
    <?php
    function exec_enabled() {
      $disabled = explode(',', ini_get('disable_functions'));
      return !in_array('exec', $disabled);
    }
    ?>
    

    编辑:根据ziagl的注释修复了分解。

        2
  •  13
  •   Community noseratio    12 年前

    下面的函数更健壮。它处理的是 disabled_functions 值在函数名之间有0个或多个空格,检查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;
    }
    
        3
  •  2
  •   svens    14 年前

    您可以搜索ini设置 disable_functions 对于 exec() 功能。

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

    为了完整起见,请注意php Safe Mode 对函数也有一些限制。

        4
  •  1
  •   Tom Willmot    13 年前

    您还需要检查安全模式是否处于活动状态,因为如果安全模式处于打开状态,则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;
    
    }
    
        5
  •  0
  •   Lance Cleveland    11 年前

    使用各种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'); }