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

Adr*_* M. 41 php unix linux exec

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

小智 54

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

if(exec('echo EXEC') == 'EXEC'){
    echo 'exec works';
}
Run Code Online (Sandbox Code Playgroud)

  • 这实际上是一个更好的答案:-) (2认同)

nc3*_*c3b 38

if(function_exists('exec')) {
    echo "exec is enabled";
}
Run Code Online (Sandbox Code Playgroud)

  • 这是不正确的 - 它只会检测该功能是否可用.大多数服务器将通过INI禁用它,这意味着该功能仍然存在但在运行时发出警告而不执行任何操作.请参阅此答案:http://stackoverflow.com/questions/3938120/check-if-exec-is-disabled (30认同)
  • @pospi那是胡说八道; `function_exists()`还检查函数是否被禁用 - [proof](http://lxr.php.net/xref/PHP_5_4/Zend/zend_builtin_functions.c#1349) (4认同)

Dun*_*moo 6

ini_get( 'disable_functions选项')

你真正想做的是ini_get('disable_functions')用来找出它是否可用:

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

回答#2浏览:检查"高管"被禁用,这实际上似乎来自于PHP手册页:http://php.net/manual/en/function.exec.php#97187

路径

如果以上返回true(您可以使用exec()),但PHP仍然无法触发脚本,那么很可能您遇到该脚本的路径问题,请执行以下操作进行测试:

print exec('which bash');
Run Code Online (Sandbox Code Playgroud)

然后试试

print exec('which ogr2ogr');
Run Code Online (Sandbox Code Playgroud)


Lan*_*and 5

这将在尝试运行它之前检查 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'); }
Run Code Online (Sandbox Code Playgroud)