После обновления PHP до версии 7 в Smarty_Compiler.class.php появилось предупреждение.
Предупреждение: preg_replace (): модификатор / e больше не поддерживается, вместо этого используйте preg_replace_callback в /var/www/……/Smarty/Smarty_Compiler.class.php в строке 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 ошибка появилась на этот раз … ….
Фатальная ошибка: Smarty ошибка: [в PATH]: синтаксическая ошибка: нераспознанный тег: php ‘. str_repeat («», substr_count (‘{* version {$ ZEND_VERSION (Smarty_Compiler.class.php, строка 458)) в /var/www/……/Smarty/Smarty.class.php в строке 1095
В месте, где произошла ошибка, информация о версии закомментирована.
До обновления PHP он работал должным образом, поэтому я думаю, что допустил ошибки в переписывании preg_replace_callback (), но я не знаю, где это не так …
Кроме того, я не уверен, что делает этот процесс Smarty_Compiler.class.php …
Если вы знакомы с PHP или 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
);