2017-09-12 2 views
0

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.

+0

Ne pas citer 'str_repeat'. – chris85

Répondre

1

Smarty est un moteur de template, une bibliothèque, et vous ne devriez pas modifier son code vous-même. Essayez plutôt de mettre à niveau la version que vous utilisez vers la version la plus récente. Il semble que cela supporte PHP7.

+1

Lors de l'examen de la version, c'était Smarty 2.6, Je vais passer à 3 séries. Merci beaucoup! – Gura

0

essayer cette

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