Я пытаюсь создать систему, в которой я могу создать файл на основе шаблона.
Шаблон хранится в БД, и я заполняю шаблон данными, отправленными из формы.
Я пытался сделать это таким образом, но я не могу использовать массив. Это всегда дает мне ошибку.
<?php
$string = "test";
$text = "This is a text for testing";
$rplc_string = '{$string}';
$rplc_text = '{$text}';
$tpl = '<html><head><title>{$string}</title></head><body><h1>{$string}</h1><p>{$text}</p><ul><?php foreach($array as $key => $value): ?><li><?php echo $key; ?></li><?php endforeach; ?></ul></body></html>';
$tpl = preg_replace($rplc_string, $string, $tpl);
$tpl = preg_replace($rplc_text, $text, $tpl);
$array = array( 'one' => '1', 'two' => '2', 'three' => '3' );
ob_start();
eval('?>' . $tpl);
$output = ob_get_clean();
echo $output;
?>
Есть ли лучший способ сделать это?
Замените двойные кавычки одинарными, когда вы определяете $ tpl
также первый аргумент preg_replace должен быть регулярным выражением:
<?php
$string = 'test';
$text = 'This is a text for testing';
$rplc_string = '/{\$string}/';
$rplc_text = '/{\$text}/';$tpl = '<html><head><title>{$string}</title></head><body><h1>{$string}</h1><p>{$text}</p><ul><?php foreach($array as $key => $value): ?><li><?php echo $key; ?></li><?php endforeach; ?></ul></body></html>';
$array = array( 'one' => '1', 'two' => '2', 'three' => '3' );
$tpl = preg_replace($rplc_string, $string, $tpl);
$tpl = preg_replace($rplc_text, $text, $tpl);
ob_start();
eval('?>' . $tpl);
$output = ob_get_clean();
echo $output;
?>
В вашем коде есть несколько ошибок. Во-первых, вы полагаете, что переменная будет интерпретироваться между одинарными кавычками. Это ложь. Переменная интерпретируется только между двойными кавычками или с использованием синтаксиса heredoc.
Вторая ошибка также является синтаксической ошибкой. Когда вы пишете шаблон регулярного выражения, вам необходимо добавить разделители. Но так как вы их забыли, фигурные скобки рассматриваются как разделители шаблонов, а не буквальные символы.