php模板无限包含的方法

来自:互联网
时间:2018-08-05
阅读:

模板中最常见的是把头部,尾部分割开来,然后各个模板文件去用包含代码把他们引入进来,作为公共模板。那如何header.htm中又包含了a.htm 而a.htm又包含了b.htm呢?这种情况虽然非常少见,但学习下终归是好的,哈哈!

<?phpfunction get_tpl($matches) {
        echo $incFile = 'templates/' . $matches[1] . '.htm';
        echo '<br>';
        if (!file_exists($incFile)) { //如果文件不存在,返回false,匹配的部分直接忽略(变为空)                return false;
        }
        echo '<hr color=red>';
        $repIncFile = preg_replace_callback('/{get-(w+)}/', 'get_tpl', file_get_contents($incFile)); //检查被包含的文件是否又包含了另一个文件,有则先替换好(递归函数,不断查找,直到找不到,才不会去执行 get_tpl 停止递归)        echo $repIncFile;//查看每次替换后的内容        echo '<hr>';
        return $repIncFile;//返回最终替换内容}
$content = file_get_contents('templates/tpl.html');
$result = preg_replace_callback('/{get-(w+)}/', 'get_tpl', $content);echo $result;

{get-(w+)}可以匹配 {get-header} {get-a} {get-b} 根据引入的文件名再去查询里面是否有包含代码,有则替换,不断重复该操作,直到没有包含代码,则不再去递归函数。

返回顶部
顶部