Intereting Posts
Преобразовать строки таблицы HTML в массив PHP и сохранить их в базе данных? Laravel – Создание токенов API для внутреннего использования для каждого пользователя URL-адрес почтовой программы PHP Измените значение второго выбора при первом выборе laravel Как получить доступ к столбцу с номером имени таблицы? jQuery – Обновить таблицу Проблема с французскими ударными символами UTF-8 Функция php function mail () не работает Как избежать нежелательной переносимости сеанса между различными экземплярами приложения Обнаружение определенных слов в представлении textarea Yii CDbConnection не удалось открыть соединение с БД: не удалось найти драйвер с облаком Google sql Многомерный массив PHP сортирует по другому массиву вставить вывод print_r в базу данных? выберите строки, где одинаковые значения столбца начинаются со строки, 2 вопроса Как преобразовать десятичную (16,4) в DATE или DATETIME в SQL или PHP

Как заменить фигурные скобки на <? Php?> В php-файле?

Я хочу заменить фигурные скобки <?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-кода – плохая идея. Самомодифицирующийся код может привести к труднодоступным ошибкам и часто связан с вредоносным программным обеспечением. Если вы объясните, чего вы пытаетесь достичь – ваша цель – вы можете получить лучший ответ.