2011-11-28 7 views
-1

Я передаю параметр «действие» в другой файл 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; 

На самом деле вы вызываете функцию с даным $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.'); 
} 
Смежные вопросы