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函数无法运行。