2011-11-28 71 views
-1

我將一個參數「action」傳遞給另一個文件process.php。 「action」的值將是在process.php中定義的函數的名稱。如果函數存在,它應該被自動調用。我試過以下內容:基於參數名稱的調用函數

$action = $_REQUEST['action']; 
$function = {$action}(); 

if(function_exists($function)) 
    $function; 
else 
    die('No function.'); 

然而,這並不起作用。有什麼建議麼?謝謝!

+1

你真的不應該那樣做,除非你想被黑客入侵。 –

回答

2

將分配更改爲$function,如下所示。請注意,function_exists僅使用函數名稱。

$action = $_REQUEST['action']; 
$function = $action; 

其實你調用的函數與此statment $result = $function();,看到Variable functionsPHP-Manual

並根據您的函數名稱約定對GET參數進行清理。

3

由於@Positive表示您正在調用賦值函數。我只想添加一些東西 - 這有點危險 - 如果請求內容是'phpinfo'或更加危險的話會怎麼樣。也許更好的主意是從一系列允許的功能中選擇功能:

$allowed_functions = array(
    'my_function_one', 
    'my_function_two' 
); 
$action = $_REQUEST['action']; 
if(in_array($action,$allowed_functions)){ 
    {$action}(); 
} 
else { 
    die('No function.'); 
}