2014-02-03 3 views
1

В настоящее время я создаю веб-приложение, и я хотел бы разрешить моим пользователям создавать шаблон. Я бы только разрешил им использовать HTML и некоторые функции для получения некоторых значений, поэтому у меня есть некоторые функции, такие как getDescription();, но с его PHP у меня также есть другая функция (например, phpinfo();), которую я не хочу использовать.Позволяет пользователям создавать шаблоны - Код сканирования для функций

Можно ли установить фильтр (например, in_array), чтобы проверить, используются ли функции, отличные от объявленных? Или есть механизм шаблонов или что-то еще, что делает это.

Я очень новичок в шаблонах, и я ничего не нашел.

ответ

2

Если они только создают HTML templa tes, вы могли бы позволить им подать, например;

<div> 
[PHP]getDescriptions()[PHP] 
</div> 

<div> 
[PHP]phpinfo()[/PHP] 
</div> 

Затем в файле синтаксического анализа, когда они экономят или что-то, вы могли бы

$allowedFunctions = array('getDescriptions'); 

$input = '';//html from the template 
foreach($allowedFunctions as $key => $value){ 
    $myVal = $value(); 
    $input = str_replace('[PHP]'.$value.'()[/PHP]',$myVal,$input); 
} 

Это заменит [PHP] getDescriptions() [/ PHP] с тем, что возвращается из getDescriptions(). ..

и phpinfo() не изменились бы.

1

вы можете проверить, существует ли функция с function_exists. Если вы хотите, чтобы использовать функции, которые вы определили для этой цели только вы можете использовать префикс эти функции с чем-то вроде «tpl_ *», как это:.

function tpl_getDescription() {/*code here*/} 

, а затем, когда вы пользователь пытается реализовать функцию как getDescription вас добавить «tpl_» к нему и проверить, что функция существует с function_exists().

if(function_exists('tpl_' . $userFuncName)) 
{ 
    call_user_func('tpl_' . $userFuncName) 
} 

таким образом, даже если пользователь пытается вызвать встроенную функцию PHP tpl_ будет приставкой, и если вернется ложь.

+0

Я думаю, я объединю это решение с @Don Relentless – JSHelp

1

Да, вы можете легко создать скрипт, который перечисляет все пользовательские функции во внешнем файле. Допустим, у вас есть этот "шаблон", template.php:

<? 
function getDescription() { 
} 
function userFunc() { 
} 
function anotherFunction() { 
} 
?> 

, то вы можете получить список всех функций template.php таким образом:

<? 
include('template.php'); 
$functions = get_defined_functions(); 
echo '<pre>'; 
print_r($functions['user']); 
echo '</pre>'; 
?> 

выведет:

Array 
(
    [0] => getdescription 
    [1] => userfunc 
    [2] => anotherfunction 
) 

I вызовет этот скрипт через AJAX, например getfunctions.php?file=template.php, который вернул JSON со всеми пользовательскими функциями внутри template.php.

+0

Где '['user']' поступает из 'print_r ($ functions ['user'])'? – JSHelp

+0

См. [Get_defined_functions] (http://www.php.net/manual/en/function.get-defined-functions.php) - это просто часть массива, возвращаемая этой функцией. В массиве есть ветвь 'internal' и ветвь' user'. Подумайте, это намного лучше, чем поиск конкретных имен функций вручную. – davidkonrad

+0

Спасибо, очень полезно. Но я поеду за то, что от Неумолимого – JSHelp

Смежные вопросы