注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

淘尽网 官方博客

淘尽网http://www.tao3w.com做最好的比价网站

 
 
 

日志

 
 
关于我

淘尽网 http://www.tao3w.com 做最好的比价网站,做最好的数据抓取专家。

网易考拉推荐

thinkphp3.1模板解析引擎修改,使之适应PHP7版本  

2016-12-27 16:36:48|  分类: PHP |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
将PHP版本从5.3.3升级为7.0.11发现原来的模板解析引擎无法解析,解决方案如下:
需要修改两个文件:
1、ThinkTemplate.class.php
第133行
修改前:$tmplContent =  preg_replace('/<!--###literal(\d+)###-->/eis',"\$this->restoreLiteral('\\1')",$tmplContent);
修改后:$tmplContent =  preg_replace_callback('/<!--###literal(\d+)###-->/is',"self::restoreLiteral",$tmplContent);
第167行
修改前:$content    =   preg_replace('/'.$begin.'literal'.$end.'(.*?)'.$begin.'\/literal'.$end.'/eis',"\$this->parseLiteral('\\1')",$content);
修改后:$content    =   preg_replace_callback('/'.$begin.'literal'.$end.'(.*?)'.$begin.'\/literal'.$end.'/is',"self::parseLiteral",$content);
第196行
修改前:$content = preg_replace('/('.$this->config['tmpl_begin'].')(\S.+?)('.$this->config['tmpl_end'].')/eis',"\$this->parseTag('\\2')",$content);
修改后:$content = preg_replace_callback('/('.$this->config['tmpl_begin'].')(\S.+?)('.$this->config['tmpl_end'].')/is',"self::parseTag",$content);
第267行开始 parseLiteral方法
修改前:private function parseLiteral($content) {
        if(trim($content)=='')  return '';
        $content            =   stripslashes($content);
        $i                  =   count($this->literal);
        $parseStr           =   "<!--###literal{$i}###-->";
        $this->literal[$i]  =   $content;
        return $parseStr;
    }
修改后:private function parseLiteral($m) {
        if(trim($m[1])=='')  return '';
        $content            =   stripslashes($m[1]);
        $i                  =   count($this->literal);
        $parseStr           =   "<!--###literal{$i}###-->";
        $this->literal[$i]  =   $content;
        return $parseStr;
    }
第282行开始的restoreLiteral方法
修改前:private function restoreLiteral($tag) {
        // 还原literal标签
        $parseStr   =  $this->literal[$tag];
        // 销毁literal记录
        unset($this->literal[$tag]);
        return $parseStr;
    }
修改后:private function restoreLiteral($tag) {
        // 还原literal标签
        $parseStr   =  $this->literal[$tag[1]];
        // 销毁literal记录
        unset($this->literal[$tag[1]]);
        return $parseStr;
    }
第354行开始的条件语句
修改前:if (!$closeTag){
                    $patterns       = '/'.$begin.$parseTag.$n1.'\/(\s*?)'.$end.'/eis';
                    $replacement    = "\$this->parseXmlTag('$tagLib','$tag','$1','')";
                    $content        = preg_replace($patterns, $replacement,$content);
                }else{
                    $patterns       = '/'.$begin.$parseTag.$n1.$end.'(.*?)'.$begin.'\/'.$parseTag.'(\s*?)'.$end.'/eis';
                    $replacement    = "\$this->parseXmlTag('$tagLib','$tag','$1','$2')";
                    for($i=0;$i<$level;$i++)
                        $content=preg_replace($patterns,$replacement,$content);
                }
修改后:if (!$closeTag){
                   
                    $callBackNotCloseTag = function($m) use($tagLib,$tag)
                    {
                        $attr    = $m[1];
                        $content = '';
                        $attr   = stripslashes($attr);
                        $content= stripslashes($content);
                        if(ini_get('magic_quotes_sybase'))
                        {
                            $attr   =  str_replace('\"','\'',$attr);
                        }
                        $tLib       =  Think::instance('TagLib'.ucwords(strtolower($tagLib)));
                        $parse      = '_'.$tag;
                        $content    = trim($content);
                        return $tLib->$parse($attr,$content);
                    };
                   
                   
                    $patterns       = '/'.$begin.$parseTag.$n1.'\/(\s*?)'.$end.'/is';
//                     $replacement    = "\$this->parseXmlTag('$tagLib','$tag','$1','')";
                    $replacement    = $callBackNotCloseTag;
                    $content        = preg_replace_callback($patterns, $replacement,$content);
                }else{
                    $callBackCloseTag = function($m) use($tagLib,$tag)
                    {
                        $attr    = $m[1];
                        $content = $m[2];
                        $attr   = stripslashes($attr);
                        $content= stripslashes($content);
                        if(ini_get('magic_quotes_sybase'))
                        {
                            $attr   =  str_replace('\"','\'',$attr);
                        }
                        $tLib       =  Think::instance('TagLib'.ucwords(strtolower($tagLib)));
                        $parse      = '_'.$tag;
                        $content    = trim($content);
                        return $tLib->$parse($attr,$content);
                    };
                   
                   
                    $patterns       = '/'.$begin.$parseTag.$n1.$end.'(.*?)'.$begin.'\/'.$parseTag.'(\s*?)'.$end.'/is';
//                     $replacement    = "\$this->parseXmlTag('$tagLib','$tag','$1','$2')";
                    $replacement    = $callBackCloseTag;
                    for($i=0;$i<$level;$i++)
                        $content=preg_replace_callback($patterns,$replacement,$content);
                }
第398行:
修改前:public function parseTag($tagStr){
修改后:public function parseTag($m){
        $tagStr = $m[2];
2、/Core/Common/common.php
第88行:
修改前:return ucfirst(preg_replace("/_([a-zA-Z])/e", "strtoupper('\\1')", $name));
修改后:return ucfirst(preg_replace_callback("/_([a-zA-Z])/", function($m){return strtoupper($m[1]);}, $name));
附修改前后的源文件
修改前:http://pan.baidu.com/s/1boTsgdp
修改后:http://pan.baidu.com/s/1hrNImg8
  评论这张
 
阅读(60)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017