PHP:如何在这里使用params?

时间:2011-09-22 16:39:50

标签: php

我正在创建一个函数,以便我可以使用一般函数从Ajax发布,我只是传递params,以避免为每个Ajax函数创建一个php文件。

这是我的函数现在在PHP方面看起来如何通过邮件接收您可以在代码中看到的参数:

$class_name = $_POST['class_name'];
$function_name = $_POST['function_name'];
$params = "'" . implode("','", $_POST['params']) . "'";
$model = new $class_name();

//Apply the function
echo $model->$function_name($params);

除了params的部分之外它正在工作...... PHP将它解释为一个参数,我能做些什么,以便$ params不会被解释为单个字符串?

2 个答案:

答案 0 :(得分:3)

第三行实际上使 $params包含所有参数的单个字符串。

根据您的框架(以及您在Ajax中传递params的方式),您可以将$_POST['params']原样传递给方法,而不是传递$params。在这种情况下,您根本不需要构建字符串。

如果您需要调用一个函数,该函数需要单独传递参数,而不是像这样的数组,请尝试

call_user_func_array(array($model, $function_name), $params)

如果$params包含1,2和3,$function_name为'foo',则上述表达式将等同于$model->foo(1, 2, 3)

注意,这将允许人们调用脚本可用的任何类的任何公共方法。您需要某种访问控制,以防止人们随机运行。正如您对问题的评论中所建议的那样,某种类型的白名单(即使它只是一个成员变量,表明该类是否意图被这样的随机代码使用)将大大有助于防止安全问题。

答案 1 :(得分:0)

不要内爆他们。将它们作为数组传递,例如$_POST已经存在。

echo $model->$function_name($_POST['params']);