Есть ли способ проверить скрипт 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 не могла работать.