Après la mise à niveau de PHP vers la version 7, Warning est apparu dans Smarty_Compiler.class.php.Erreur dans preg_replace() → preg_replace_callback() réécriture? [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
En regardant l'emplacement d'erreur ...... ↓
$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() semblait être inutilisable, et je l'ai changé à 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);
Ensuite, l'erreur Smarty est apparu cette fois-ci ... ....
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
Dans le lieu où l'erreur est survenue, les informations de version est commentée. Avant de mettre à jour PHP ça fonctionnait correctement, donc je pense que j'ai fait des erreurs dans preg_replace_callback() réécriture, mais je ne sais pas où ... Aussi, je ne suis pas sûr de ce que fait ce processus de Smarty_Compiler.class.php ... Si vous êtes familier avec PHP ou Smarty, s'il vous plaît faites le moi savoir.
Ne pas citer 'str_repeat'. – chris85