从另一个php文件的文本框中的php文件执行函数

时间:2018-04-26 07:26:15

标签: php

我是否可以通过在另一个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."?>

2 个答案:

答案 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]);