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

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

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

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

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

Следующая функция более надежная. Он имеет дело с значением disabled_functions имеющим 0 или более пробелов между именами функций, проверяет настройки черного списка патчей сухосина, охватывает 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; } 

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

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

Для полноты, обратите внимание, что PHP Safe Mode также устанавливает некоторые ограничения на функцию.

Вам также необходимо проверить, является ли 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; } 

Однострочная компиляция безопасного режима, функции существует и отключена 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'); }