不太清楚该怎么描述,但是这里..。
我有一个大型的PHP函数库,我想通过某种api接口公开它。
例如,这个查询字符串:
api.php?function=myFunction¶m1=xxx¶m2=xxx&将转化为:
$ret = myFunction( $param1, $param2 );。。而这个查询字符串。
api.php?function=myFunction¶m2=xxx¶m1=xxx&将转化为:
$ret = myFunction( $param1, $param2 );请注意,我希望必须依赖查询字符串将所需的参数放在查询中,并按所需的顺序排列。
这可行吗?我有一些可能有用的想法,但我认为我应该把它放在这里,也许可以从PHP专家那里得到一些更好的想法。
谢谢-
发布于 2009-04-21 18:19:58
使用call_user_func_array function调用带有其参数数组的函数。
如果您真的想从查询中提取参数,可以使用以下内容:
$params = array();
foreach ($_GET as $name => $val) {
if (preg_match('/^param[1-9]\d*$/', $name)) {
$param[$name] = $val;
}
}
ksort($params);发布于 2009-04-21 18:19:38
将参数收集到数组中,然后将其传递给函数。
发布于 2009-04-21 19:03:34
只需将$_GET传递给您的函数即可。在您的函数中,您可以查找您想要的参数。或者创建第二个函数
function getFunctionCall($getParams)
{
$function = $getParams['function'];
returnArray['functionName'] = $function;
$getArraySize = count($getParams);
for(i = 1; $i < $getArraySize; $i++)
{
$param = $getParams['param'. $i];
// do any cleaning you need on $param i ;
$param = urldecode($param);
returnArray['params']['param'.$i] = $param;
}
return $returnArray;
}现在您有了一个返回数组,您可以这样做:
$mystuff = getFunctionCall($_GET);
$functionString = $mystuff['functionName'] . '("' . implode($mystuff[params], '","') . '")";
$myResult = eval($functionString);不过,做这件事要小心.functionName可能是阳光下的任何旧东西,包括fopen,fopen等等.在允许调用函数之前,创建一个“已批准的函数”列表并对照它检查函数名可能是个好主意。另外,我把parms作为字符串放在那个eval中的方式是非常危险的。你可以让字符串在传递的对角线中转义。也许最好做一个for循环,让它将变量名而不是变量内容作为字符串来执行。
最后,如果您确实知道函数的参数数,那么只使用它就更安全了。
$results = $mystuff['functionName']($mystuff[params][param1]); 诸若此类。
https://stackoverflow.com/questions/773897
复制相似问题