Подтвердить что ты не робот

Проверьте, отключен ли "exec"

Есть ли какая-либо функция в PHP, которую я могу использовать, чтобы определить, доступна ли функция exec?

4b9b3361

Ответ 1

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

EDIT: Исправлено взорвание в соответствии с комментарием Ziagl.

Ответ 2

Следующая функция более надежная. Он имеет дело с значением 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

Вы можете выполнить поиск установки ini disable_functions для функции exec().

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

Просто для полноты, обратите внимание, что PHP Безопасный режим также создает некоторые ограничения на функцию.

Ответ 4

Вам также необходимо проверить, активен ли safe_mode, поскольку exec недоступен, если safe_mode включен

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

Однострочная компиляция безопасного режима, функции существует и отключена exec, используя некоторые методы, найденные на различных сообщениях SO.

Это проверит, что 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'); }