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

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

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

4b9b3361

Ответ 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.