preg_replace() → preg_replace_callback()重写出错? [Smarty_Compiler.class.php]
Error in preg_replace () → preg_replace_callback () rewriting? [Smarty_Compiler.class.php]
升级PHP到版本7后,Smarty_Compiler.class.php出现警告。
Warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /var/www/……/Smarty/Smarty_Compiler.class.php on line 271
查看错误位置……↓
$source_content = preg_replace($search.'e', "'"
. $this->_quote_replace($this->left_delimiter) . 'php'
. "' . str_repeat(\"\n\", substr_count('\0', \"\n\")) .'"
. $this->_quote_replace($this->right_delimiter)
. "'"
, $source_content);
Preg_replace() 好像不能用,我改成了preg_replace_callback().
$source_content = preg_replace_callback($search
, function($matches) {
return "'"
. $this->_quote_replace($this->left_delimiter) . 'php'
. "' . str_repeat(\"\n\", substr_count('" . $matches[0] . "', \"\n\")) .'"
. $this->_quote_replace($this->right_delimiter)
. "'";
}
, $source_content);
那么,这次就出现了Smarty错误......
Fatal error: Smarty error: [in PATH]: syntax error: unrecognized tag: php' . str_repeat(" ", substr_count('{*version {$ZEND_VERSION (Smarty_Compiler.class.php, line 458) in /var/www/……/Smarty/Smarty.class.php on line 1095
在错误的地方,版本信息被注释掉了。
在升级PHP之前是可以正常使用的,所以我认为我在preg_replace_callback()重写时出错了,但我不知道哪里错了......
另外,我不确定 Smarty_Compiler.class.php 这个过程在做什么......
如果您熟悉 PHP 或 Smarty,请告诉我。
Smarty 是一个模板引擎,一个库,你不应该自己修改它的代码。而是尝试将您使用的版本升级到最新版本。好像支持PHP7.
试试这个
$source_content = preg_replace_callback($search,
function($matches) {
return
$this->_quote_replace($this->left_delimiter) . 'php' . str_repeat(
$this->_quote_replace("\n"),
substr_count($matches[0], $this->_quote_replace("\n"))
)
. $this->_quote_replace($this->right_delimiter);
},
$source_content
);
升级PHP到版本7后,Smarty_Compiler.class.php出现警告。
Warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /var/www/……/Smarty/Smarty_Compiler.class.php on line 271
查看错误位置……↓
$source_content = preg_replace($search.'e', "'"
. $this->_quote_replace($this->left_delimiter) . 'php'
. "' . str_repeat(\"\n\", substr_count('\0', \"\n\")) .'"
. $this->_quote_replace($this->right_delimiter)
. "'"
, $source_content);
Preg_replace() 好像不能用,我改成了preg_replace_callback().
$source_content = preg_replace_callback($search
, function($matches) {
return "'"
. $this->_quote_replace($this->left_delimiter) . 'php'
. "' . str_repeat(\"\n\", substr_count('" . $matches[0] . "', \"\n\")) .'"
. $this->_quote_replace($this->right_delimiter)
. "'";
}
, $source_content);
那么,这次就出现了Smarty错误......
Fatal error: Smarty error: [in PATH]: syntax error: unrecognized tag: php' . str_repeat(" ", substr_count('{*version {$ZEND_VERSION (Smarty_Compiler.class.php, line 458) in /var/www/……/Smarty/Smarty.class.php on line 1095
在错误的地方,版本信息被注释掉了。 在升级PHP之前是可以正常使用的,所以我认为我在preg_replace_callback()重写时出错了,但我不知道哪里错了...... 另外,我不确定 Smarty_Compiler.class.php 这个过程在做什么...... 如果您熟悉 PHP 或 Smarty,请告诉我。
Smarty 是一个模板引擎,一个库,你不应该自己修改它的代码。而是尝试将您使用的版本升级到最新版本。好像支持PHP7.
试试这个
$source_content = preg_replace_callback($search,
function($matches) {
return
$this->_quote_replace($this->left_delimiter) . 'php' . str_repeat(
$this->_quote_replace("\n"),
substr_count($matches[0], $this->_quote_replace("\n"))
)
. $this->_quote_replace($this->right_delimiter);
},
$source_content
);