我是否可以通过在另一个php文件的输入texbox中键入该函数的名称来在php文件中执行函数。
function bamiiChuckNorris() {
$arrContextOptions=array(
"ssl"=>array(
"verify_peer"=>false,
"verify_peer_name"=>false,
),
);
$geocodeUrl = "http://api.icndb.com/jokes/random";
$response = file_get_contents($geocodeUrl, false, stream_context_create($arrContextOptions));
$a =json_decode($response, true);
return $a['value']['joke'];
}function bamiiTellTime($data) {
if(strpos($data, 'in')) {
return "Sorry i can't tell you the time somewhere else right now";
} else {
return 'The time is:' . date("h:i");
}
}?>
这是我的档案
<?php include answers.php
This is the input text box
<input name="input" type="text" class="tb5" placeholder="Chat with me! Press Ask to send."?>
答案 0 :(得分:1)
是的,可以动态执行功能,但要确保它有很多验证用户只能调用有效的功能。
$functionName = $_POST['input'];
if (function_exists($functionName)) {
// Dynamic call using variable value as function name.
$response = {$functionName}();
} else {
throw new Exception(404, "Function '{$functionName}' not found");
}
如果检查对象方法,请使用method_exists($class, $functionName)
要从get_number(1)
之类的输入执行代码,几乎没有选项:
1)使用eval($input)
- insecure
2)使用正则表达式解析用户输入
$uInput = $_POST['input'];
$matches = [];
preg_match('/(\w+)\((\w+)\)/', $uInput, $matches);
$functionName = $matches[1];
$params = $matches[2];
{$functionName}(...explode(', ', $params));
答案 1 :(得分:0)
这是我的解决方案,基于您的代码@Justinas
$function = $_POST['input'];
$functionName = explode("(", $function);
if (function_exists($functionName[0])) {
$functionVariable = explode(')',$functionName[1],2);
// Dynamic call using variable value as function name.
$response = $functionName[0]($functionVariable[0]);