Я хочу заменить фигурные скобки <?php ?>
В файле с расширением php. У меня есть класс как библиотека, и в этом классе у меня есть три функции:
function replace_left_delimeter($buffer) { return($this->replace_right_delimeter(str_replace("{", "<?php echo $", $buffer))); } function replace_right_delimeter($buffer) { return(str_replace("}", "; ?> ", $buffer)); } function parser($view,$data) { ob_start(array($this,"replace_left_delimeter")); include APP_DIR.DS.'view'.DS.$view.'.php'; ob_end_flush(); }
и у меня есть файл с расширением php, например:
{tmp} tmpstr
на выходе я сохраняю только tmpstr и в исходном коде в браузере я получаю
<?php echo $tmp; ?> tmpstr
В include файл <?
показанный как <!--?
и быть комментарий. Зачем?
сделай это:
function parser($view,$data) { $data=array("data"=>$data); $template=file_get_contents(APP_DIR.DS.'view'.DS.$view.'.php'); $replace = array(); foreach ($data as $key => $value) { #if $data is array... $replace = array_merge( $replace,array("{".$key."}"=>$value) ); } $template=strtr($template,$replace); echo $template; }
и игнорировать другие две функции.
То, что вы пытаетесь сделать здесь, не будет работать. Замены, выполняемые обратным вызовом буферизации вывода, происходят после того, как PHP-код уже разобран и выполнен. Представление новых тегов кода PHP на этом этапе не приведет к их выполнению.
Вам необходимо вместо этого предварительно обработать исходный файл PHP, прежде чем оценивать его, например
$tp = file_get_contents(APP_DIR.DS.'view'.DS.$view.'.php'); $tp = str_replace("{", "<?php echo \$", $tp); $tp = str_replace("}", "; ?>", $tp); eval($tp);
Однако я настоятельно рекомендую использовать существующий механизм шаблонов; этот подход будет неэффективным и ограниченным. Например, вы, возможно, захотите дать Twig .
Как это работает:
process.php :
<?php $contents = file_get_contents('php://stdin'); $contents = preg_replace('/\{([a-zA-Z_][a-zA-Z_0-9]*)\}/', '<?php echo $\1; ?>', $contents); echo $contents;
скрипт bash :
process.php < my_file.php
Обратите внимание, что вышеизложенное выполняется путем однократного поиска и замены. Вы можете легко изменить сценарий, если хотите сделать это на лету.
Также обратите внимание, что изменение PHP-кода из PHP-кода – плохая идея. Самомодифицирующийся код может привести к труднодоступным ошибкам и часто связан с вредоносным программным обеспечением. Если вы объясните, чего вы пытаетесь достичь – ваша цель – вы можете получить лучший ответ.