我正在制作一个函数,以便我可以使用一个通用函数从Ajax发布,我只是传递参数,以避免必须为每个Ajax函数创建一个php文件。
这是我的函数现在在PHP端接收后的样子,通过post,你可以在代码中看到参数:
$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);
它正在工作,除了从部分参数…PHP将其解释为一个参数,我该怎么做才能使$params不被解释为单个字符串?
第三行实际上使 $params
成为包含所有参数的单个字符串。
根据您的框架(以及您如何在Ajax中传递参数),您可能能够将$_POST['params']
原样传递给方法,而不是传递$params
。在这种情况下,您根本不需要构建字符串。
如果你需要调用一个希望参数单独传递的函数,而不是像那样在数组中传递,请尝试
call_user_func_array(array($model, $function_name), $params)
如果$params
包含1,2,3,且$function_name
为'foo',则上述表达式等价于$model->foo(1, 2, 3)
。
注意,这将允许人们调用脚本可用的任何类的任何公共方法。你需要某种访问控制来防止人们随意操作。正如在你的问题的评论中所建议的那样,某种类型的白名单(即使它只是一个成员变量,表明类是否意味着由这样的随机代码使用)将大大有助于防止安全问题。
不要破坏它们。将它们作为数组传递,就像$_POST
一样。
echo $model->$function_name($_POST['params']);