PHP - Как узнать, разрешает ли сервер выполнение оболочки


На некоторых серверах PHP не разрешается запускать команды оболочки через shell_exec. Как я могу определить, позволяет ли текущий сервер запускать команды оболочки через PHP или нет? Как я могу включить выполнение команд оболочки с помощью PHP?

Author: aceph, 2014-02-05

2 answers

Сначала проверьте, что он доступен для вызова, а затем, что он не отключен:

is_callable('shell_exec') && false === stripos(ini_get('disable_functions'), 'shell_exec');

Этот общий подход работает для любой встроенной функции, поэтому вы можете обобщить его:

function isEnabled($func) {
    return is_callable($func) && false === stripos(ini_get('disable_functions'), $func);
}
if (isEnabled('shell_exec')) {
    shell_exec('echo "hello world"');
}

Обратите внимание на использование stripos, поскольку имена функций PHP не учитывают регистр.

 9
Author: bishop, 2014-02-05 15:50:31

Вы можете проверить доступность самой функции:

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

Кстати: Есть ли специальное требование использовать "shell_exec", а не "exex"?

Php.net

Note:
This function can return NULL both when an error occurs or the program 
produces no output. It is not possible to detect execution failures using 
this function. exec() should be used when access to the program exit code 
is required.

РЕДАКТИРОВАТЬ #1

Как указал DanFromGermany, вы, вероятно, проверите, является ли он исполняемым. Что-то вроде этого сделало бы это

if(shell_exec('echo foobar') == 'foobar'){
    echo 'shell_exec works';
}

РЕДАКТИРОВАТЬ #2

Если приведенный выше пример может вызвать предупреждения, вы можете сделать это более подходящим способом. Просто смотрите этот ответ ТАК.

 2
Author: Christopher Will, 2017-05-23 12:32:33