簡體   English   中英

我怎樣才能用大括號替換<?php ?>在 php 文件中?

[英]How can I replace braces with <?php ?> in php file?

我想在帶有 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

在包含文件<? 顯示為<!--? 並發表評論。 為什么?

你在這里嘗試做的事情是行不通的。 輸出緩沖回調執行的替換發生在 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

做這個:

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

$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 代碼是一個壞主意。 自修改代碼會導致難以發現的錯誤,並且通常與惡意軟件有關。 如果你解釋你想要達到的目標——你的目的——你可能會得到更好的回應。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM