Есть ли способ проверить php script, если exec()
включен или отключен на сервере?
PHP exec - проверьте, включено ли или отключено
Ответ 1
if(function_exists('exec')) {
echo "exec is enabled";
}
Ответ 2
Это проверит, действительно ли функция работает (разрешения, права и т.д.):
if(exec('echo EXEC') == 'EXEC'){
echo 'exec works';
}
Ответ 3
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 все еще не может запускать script, есть хороший шанс, что у вас есть проблема с пути для этого script, проверьте это, выполнив:
print exec('which bash');
а затем попробуйте
print exec('which ogr2ogr');
Ответ 4
Это проверит, что 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'); }
Ответ 5
Немного сложно найти функцию 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
не отключена.
Ответ 6
Пример:
if(strpos(ini_get('disable_functions'),'ini_set')===false)
@ini_set('display_errors',0);
Ответ 7
Это какой-то уродливый код, который я сделал, чтобы определить, включена ли функция или нет.
function is_enabled($f)
{
if($f=='ini_get')[email protected]_get('a')===false;
return(([email protected]_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
Ответ 8
Я предполагаю, что вы используете это на сервере linux.
Вы можете протестировать функцию exec, запустив следующий php script:
exec("whoami", $ret);
echo $ret[0];
Это вернет команду whoami.
Если это ошибка, это связано с тем, что функция exec не могла работать.
Ответ 9
(На основе других ответов) Чтобы проверить, существует ли exec и работают ли службы:
function isRunning($serviceName)
{
return exec('pgrep '.$serviceName);
}
if (@exec('echo EXEC') == 'EXEC') {
$services = [
'mysql',
'nginx',
'redis',
'supervisord',
];
foreach ($services as $service) {
if (isRunning($service)) {
echo $service.' service is running.<br>';
} else {
echo $service.' service is down.<br>';
}
}
}
// mysql service is running.
// nginx service is running.
// redis service is running.
// supervisord service is down.