PHP exec - 检查是启用还是禁用

时间:2010-05-01 10:34:42

标签: php linux unix exec

如果在服务器上启用或禁用了exec(),有没有办法检查php脚本?

9 个答案:

答案 0 :(得分:51)

这将检查函数是否实际有效(权限,权限等):

if(exec('echo EXEC') == 'EXEC'){
    echo 'exec works';
}

答案 1 :(得分:36)

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

答案 2 :(得分:6)

<强> ini_get(&#39; disable_functions选项&#39)

您真正想要做的是使用ini_get('disable_functions')来确定您是否可以使用它:

<?php
function exec_enabled() {
    $disabled = explode(',', ini_get('disable_functions'));
    return !in_array('exec', $disabled);
}
?>

在这里回答stackoverflow:Check if "exec" is disabled,它实际上似乎来自PHP Man页面:http://php.net/manual/en/function.exec.php#97187

<强>路径

如果上面的内容返回true(你可以使用exec()),但PHP仍然无法触发脚本,那么你很可能会遇到该脚本的路径问题,通过这样做来测试:

print exec('which bash');

然后尝试

print exec('which ogr2ogr');

答案 3 :(得分:3)

这将在尝试运行之前检查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'); }

答案 4 :(得分:3)

除非检查所有可能性

,否则找到Scoped函数有点棘手

1。exec

2.扫描function_exist('exec')

3.检查启用ini_get('disabled_functions)

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; } 功能未被禁用,否则此函数不会抛出警告。

答案 5 :(得分:1)

示例:

if(strpos(ini_get('disable_functions'),'ini_set')===false) 
    @ini_set('display_errors',0);

答案 6 :(得分: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

答案 7 :(得分:0)

我假设你在Linux服务器上运行它。

您可以通过运行以下php脚本来测试exec函数:

exec("whoami", $ret);

echo $ret[0];

这将返回命令whoami。

如果它出错,那是因为exec函数无法运行。

答案 8 :(得分:0)

(基于其他回复) 要检查 exec 是否存在并且服务正在运行:

df1 <- read.table("lob_lobbying.txt", sep="|", fill = TRUE, stringsAsFactors = FALSE)