PHP exec – проверьте, включено ли или отключено

Есть ли способ проверить скрипт php, если exec() включен или отключен на сервере?

 if(function_exists('exec')) { echo "exec is enabled"; } 

Это проверит, действительно ли функция работает (разрешения, права и т. Д.):

 if(exec('echo EXEC') == 'EXEC'){ echo 'exec works'; } 

ini_get ( '') disable_functions

То, что вы на самом деле хотите сделать, это использовать ini_get('disable_functions') чтобы узнать, доступно ли вам:

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

Отвечено на stackoverflow здесь: проверьте, отключен ли «exec» , что на самом деле похоже на странице PHP Man: http://php.net/manual/en/function.exec.php#97187

Дорожка

Если приведенное выше значение возвращает true (вы можете использовать exec ()), но PHP все еще не может запускать сценарий, есть хороший шанс, что у вас есть проблема с пути для этого скрипта, проверьте это, выполнив следующие действия:

 print exec('which bash'); 

а затем попробуйте

 print exec('which ogr2ogr'); 

Это проверит, что 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')) != 1 ; if($exec_enabled) { exec('blah'); } 

Немного сложно найти функцию exec пока не проверите все возможности

1. function_exist('exec')

2.Сканирование через ini_get('disabled_functions)

3.Проверка безопасности safe_mode

 function is_shell_exec_available() { if (in_array(strtolower(ini_get('safe_mode')), array('on', '1'), true) || (!function_exists('exec'))) { return false; } $disabled_functions = explode(',', ini_get('disable_functions')); $exec_enabled = !in_array('exec', $disabled_functions); return ($exec_enabled) ? true : false; } 

Эта функция никогда не выдает предупреждения, если функция ini_get не отключена.

Пример:

 if(strpos(ini_get('disable_functions'),'ini_set')===false) @ini_set('display_errors',0); 

Это какой-то уродливый код, который я сделал, чтобы определить, включена ли функция или нет.

 function is_enabled($f) { if($f=='ini_get')return@ini_get('a')===false; return(($l=@ini_get('disable_functions'))===null||!is_callable($f)||!function_exists($f)||!in_array($f,array_map('trim',explode(',',$l))); } //Usage example: print_r(is_enabled('str_split'));//true or null if ini_get() is disabled 

Я предполагаю, что вы запускаете это на сервере Linux.

Вы можете протестировать функцию exec, запустив следующий скрипт php:

 exec("whoami", $ret); echo $ret[0]; 

Это вернет команду whoami.

Если это ошибка, это связано с тем, что функция exec не могла работать.