На некоторых серверах PHP не разрешено запускать команды оболочки через shell_exec. Как я могу определить, позволяет ли текущий сервер запускать команды оболочки через PHP или нет? Как я могу включить выполнение команд оболочки через PHP?
PHP - Как узнать, разрешает ли сервер shell_exec
Ответы (2)
Сначала убедитесь, что он вызывается, а затем не отключен:
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 нечувствительны к регистру.
person
bishop
schedule
05.02.2014
И вам, вероятно, следует проверить, включен ли безопасный мод.
- person Christopher Will; 05.02.2014
@ChristopherWill:Безопасный режим устарел в версии 5.3 и вызывает фатальную ошибку в версии 5.4, поэтому я его не включал. Я что-то упустил, не включив его (за исключением, очевидно, ‹= 5.2, но это EOL)?
- person bishop; 05.02.2014
Ах, я даже не знал, что это устарело. Спасибо за обновления. Думаю, это все.
- person Christopher Will; 05.02.2014
Вы можете проверить доступность самой функции:
if(function_exists('shell_exec')) {
echo "exec is enabled";
}
Кстати: есть ли особое требование использовать «shell_exec», а не «exex»?
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
Если приведенный выше пример может привести к появлению предупреждений, вы можете сделать это более подходящим способом. Просто см. этот ответ SO.
person
Christopher Will
schedule
05.02.2014
Нет. Функция отключена, но она есть. Это не работает.
- person Daniel W.; 05.02.2014
@bishop Да, вы совершенно правы. Вот почему я обновил свой ответ и вставил ссылку на хороший ответ SO.
- person Christopher Will; 05.02.2014
How can I enable shell commands execution via PHP?
Только в корневой конфигурации. Это функция безопасности. - person Pekka   schedule 05.02.2014