Я писал CMS в стиле MVC и использовал класс Template для извлечения различных файлов, необходимых через file_get_contents
В конце я делаю
eval('?>'.($template).'<?');
Зная, чтоeval - это зло, как я могу альтернативно очистить эти данные, чтобы PHP фактически отображал код?
В данный момент класс Template делает это, когда все загружено.Возможно ли, чтобы класс Template возвратил этот код в мой index.php как переменную, а затем запустил что-то для его выполнения?
Каждый пример кодирования сайта в стиле MVC, с которым я сталкивался, использует evalрешить эту проблему.
Еще один связанный с этим вопрос - я понимаю, что eval может использоваться для запуска вредоносного кода, введенного пользователем, но разве какая-то другая функция не постигла бы та же участь?Если я превращу какой-либо пользовательский контент в html-сущности, разве это не поможет?
Вполне возможно, что мой метод имеет недостатки, но он следует примерам, которые я читал, поэтому я стремлюсь увидеть другой метод, который избегает eval.
Я сделалпросто найдите этот фрагмент, который выполняет то же самое:
function interpolate( $string ){
foreach ($GLOBALS as $name => $value){
$string = str_replace( '$'.$name, $value, $string );
}
$string = preg_replace( '/[$]\\w+/', '', $string );
return $string;
}
Это эффективно отображает весь код, заменяя переменные с их правильным содержанием.