PHP exec – 检查是否启用或禁用
如果在服务器上启用或禁用了exec()
是否有办法检查php脚本?
if(function_exists('exec')) { echo "exec is enabled"; }
这将检查函数是否真正起作用(权限,权限等):
if(exec('echo EXEC') == 'EXEC'){ echo 'exec works'; }
ini_get( 'disable_functions选项')
你真正想要做的是使用ini_get('disable_functions')
来查明它是否可用给你:
<?php function exec_enabled() { $disabled = explode(',', ini_get('disable_functions')); return !in_array('exec', $disabled); } ?>
在这里回复stackoverflow: 检查是否禁用“执行” ,其实似乎来自PHP手册页: http : //php.net/manual/en/function.exec.php#97187
path
如果上面的代码返回true(你可以使用exec()),但是PHP仍然不能触发脚本,那么你很可能会遇到这个脚本的path问题,
print exec('which bash');
然后尝试
print exec('which ogr2ogr');
这将检查该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'); }
find可用的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
函数没有被禁用。
例:
if(strpos(ini_get('disable_functions'),'ini_set')===false) @ini_set('display_errors',0);
这是我用来检测函数是否启用的一些难看的代码。
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
我假设你正在运行在Linux服务器上。
你可以通过运行下面的php脚本来testingexec函数:
exec("whoami", $ret); echo $ret[0];
这将返回命令whoami。
如果出错,那是因为exec函数无法运行。