Вы должны действительно старайтесь избегать использования eval
, если это возможно. Он представляет собой огромный и почти непреодолимый риск для безопасности. Я никогда в своей карьере не встречал веских оснований использовать эту функцию. Если вы опубликуете пример, возможно, мы сможем помочь вам найти способ достичь своей цели без этого огромного риска.
Отказ от ответственности в сторону, я думаю, проблема заключается в том, что вы начинаете выражение в eval
, которое должно быть полным.
Вы могли бы попробовать это вместо:
<?php
$test = eval("return 1==1;");
if($test)
{
echo 'abc';
}
редактировать:
Цель состоит в том, чтобы сделать что-то вроде этого:
[if {expression}][blog_title][endif]
Вот идея. Вместо того, чтобы позволить пользователю вводить какое-либо выражение, просто используйте переменную, которую пользователь может установить. Например:
[if should_show_blog_title][blog_title][endif]
Затем пользователь может сделать это (псевдо-иш код, так как я не уверен, что ваш шаблонный API выглядит):
$template = new Template();
// shows blog title
$template->set_variable('should_show_blog_title', 1 == 1); // 1 == 1 is true, so the variable is true
$template->set_variable('blog_title', 'Awesomesauce Blog!');
// doesn't show title
$template->set_variable('should_show_blog_title', 1 == 0); // 1 == 0 is false, so the variable is false
$template->set_variable('blog_title', 'Awesomesauce Blog!');
Другой идеей было бы предоставить ограниченное число операторов или функций, которые пользователь может использовать. Вместо eval
При этом вы должны проанализировать его. Например:
[if not_empty(blog_title)][blog_title][end if]
Затем, когда вы разбираете и компилировать шаблон (вставить данные в, в основном), вы посмотрите на эти специальные функции и перевести их в PHP. Это в основном белый список, поскольку вы разрешаете пользователю выполнять очень ограниченный набор функций.
Вы должны посмотреть на Mustache, какой вид следует за первой идеей. Реализация на самом деле довольно проста. PHP-реализация усов здесь: mustache.php. Вы можете просмотреть образцы и некоторый код, чтобы узнать, можете ли вы получить некоторые идеи.
Следует иметь в виду, что если вы используете eval
, то механизм шаблонов не будет таким же удобным, потому что тогда пользователь должен написать действующий PHP в своих условиях. Часть привлекательности усов заключается в том, что она настолько проста и невероятно проста в использовании.Я опытный PHP-разработчик, и хотя я могу взломать PHP в течение всего дня, я все же предпочитаю усы для шаблонов, потому что это просто позволяет мне понять.
Я хочу создать шаблон egine – Snoob
Вы хотите использовать механизм шаблонов для создания шаблона? – BoltClock
№ сделать шаблон двигателя. Ответьте на мой вопрос, пожалуйста, – Snoob