执行名为$ _POST值的函数的较短方法

时间:2018-08-28 09:11:23

标签: php

if (isset($_POST['fn'])) {
    if ($_POST['fn'] == 'giveme_lb') {giveme_lb();}
    elseif ($_POST['fn'] == 'giveme_lc') {giveme_lc();}
    elseif ($_POST['fn'] == 'ico_save') {ico_save();}
    ...
}

所以我需要执行一个名为$_POST['fn']值的函数。

有什么简短的说法吗?

类似$_POST['fn']();

1 个答案:

答案 0 :(得分:2)

call_user_func($_POST['fn']);

请参见http://php.net/call_user_func

但是实际上$_POST['fn']()也可以在所有非古老的PHP版本中使用(如果我没记错的话,该版本为5.3 +)。

但是您绝对需要先 whitelist 值,这样用户才能在系统上调用任意代码:

$allowed = ['giveme_lb', ...];
if (!in_array($_POST['fn'], $allowed)) {
    throw new Exception("Not allowed to execute $_POST[fn]");
}