Sugarcrm / Suitecrm smarty preg_replace

时间:2014-02-19 18:28:48

标签: smarty sugarcrm

我得到了以下错误

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in C:\xampp\htdocs\suitecrm\include\Smarty\Smarty_Compiler.class.php on line 268

我更改了PHP.ini文件以停止显示已弃用的错误,但它仍显示

 error_reporting=E_ALL & ~E_DEPRECATED & ~E_STRICT

我也改变了Smarty_Compiler.class中的行

   $source_content = preg_replace_callback($search, create_function ('$matches', "return '"
                                   . $this->_quote_replace($this->left_delimiter) . 'php'
                                   . "' . str_repeat(\"\n\", substr_count('\$matches[1]', \"\n\")) .'"
                                   . $this->_quote_replace($this->right_delimiter)
                                   . "';")
                                   , $source_content); 

但它不起作用..

请告知

3 个答案:

答案 0 :(得分:0)

I found that似乎有效:

将第262行的行替换为:

/* replace special blocks by "{php}" */
   $source_content = preg_replace_callback($search, 
   function($m) {
   return "{php ".str_repeat("\n", substr_count($m[0], "\n"))."}";
   },
   $source_content);

答案 1 :(得分:0)

我已经通过替换include / Smarty / Smarty_Compiler.class.php 文件中的代码解决了这个问题。我用下面提到的代码替换了从262到268的行号代码。之后删除缓存文件夹中的所有文件并重新加载页面。这个问题将得到解决。

/* replace special blocks by "{php}" */ 
        $source_content = preg_replace_callback($search, create_function ('$matches', "return '" 
                                                . $this->_quote_replace($this->left_delimiter) . 'php' 
                                                . "' . str_repeat(\"\n\", substr_count('\$matches[1]', \"\n\")) .'" 
                                                . $this->_quote_replace($this->right_delimiter) 
                                                . "';") 
                                                , $source_content);

答案 2 :(得分:0)

我的解决方案:

    $source_content = preg_replace_callback($search,
        function($m) {
            return $this->_quote_replace($this->left_delimiter) .
                "php ".str_repeat("\n", substr_count($m[0], "\n")) .
                $this->_quote_replace($this->right_delimiter);
        },
        $source_content);
  • 在Axel De Acetis的解决方案中,我错过了函数$ this-> _quote_replace的使用。
  • 在Sandeep Shivhare的解决方案中,我不喜欢$ matches [1]中的数字1,它引用了错误的字符串。