PHP exec - проверить, включен или отключен - PullRequest
41 голосов
/ 01 мая 2010

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

Ответы [ 8 ]

52 голосов
/ 14 января 2013

Это проверит, работает ли функция (права, права и т. Д.):

if(exec('echo EXEC') == 'EXEC'){
    echo 'exec works';
}
36 голосов
/ 01 мая 2010
if(function_exists('exec')) {
    echo "exec is enabled";
}
6 голосов
/ 06 августа 2014

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: http://php.net/manual/en/function.exec.php#97187

Путь

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

print exec('which bash');

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

print exec('which ogr2ogr');
3 голосов
/ 17 мая 2017

Сложно найти функцию 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.

3 голосов
/ 13 марта 2013

Это проверит, что 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'); }
1 голос
/ 12 октября 2016

Пример:

if(strpos(ini_get('disable_functions'),'ini_set')===false) 
    @ini_set('display_errors',0);
0 голосов
/ 24 мая 2016

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

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

exec("whoami", $ret);

echo $ret[0];

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

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

0 голосов
/ 12 февраля 2014

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

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...