在某些服务器上,不允许PHP通过shell_exec运行shell命令。如何检测当前服务器是否允许通过PHP运行shell命令?如何通过PHP启用shell命令执行?
答案 0 :(得分:11)
首先检查它是否可调用,然后检查它是否已禁用:
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函数名称不区分大小写。
答案 1 :(得分:3)
您可以检查功能本身的可用性:
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
如果上面的示例可能会产生警告,您可以采用更合适的方式。只需see this SO answer。