Zend Framework — Ошибка в перезаписи preg_replace () → preg_replace_callback ()? [Smarty_Compiler.class.php]

После обновления 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, пожалуйста, дайте мне знать.

0

Решение

всезнайка это движок шаблонов, библиотека, и вы не должны изменять его код самостоятельно. Вместо этого попробуйте обновить версию, которую вы используете, до самой новой. Кажется, что он поддерживает PHP7.

1

Другие решения

попробуй это

    $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
);
1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector