初級・中級者向け~ウェブ制作備忘録
freo Ver 1.19.3 を利用中、PHPのバージョンを 5.6.18 にアップデートすると、以下のエラーメッセージが出るようになった。
Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/*****/freo/libs/smarty/Smarty_Compiler.class.php on line 270
このエラー内容は、
e (PREG_REPLACE_EVAL)
警告
この機能は PHP 5.5.0 で非推奨になります。この機能に頼らないことを強く推奨します。
この非推奨の修飾子を設定すると、preg_replace() は、置換文字列において後方参照に関する通常の置換を行った後、PHPコードとして評価し、検索文字列を置換するためにその結果を使用します。置換された後方参照においては、単引用符や二重引用符、バックスラッシュ (\)および NULL 文字はバックスラッシュでエスケープされます。
ようわからんが、preg_replace()は、非推奨だから使うな!ってこと。
エラーが出ているのは『/freo/libs/smarty/Smarty_Compiler.class.php』の270行目あたりということなので、確認してみると以下のコードが。
$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);
調べてみますと、smarty公式サイトのフォーラムにドンピシャの解決コードがありました。
$source_content = preg_replace_callback($search, create_function ('$matches', "return '" . $this->_quote_replace($this->left_delimiter) . 'php' . "' . str_repeat(\"\n\", substr_count('\$matches[1]', \"\n\")) .'" . $this->_quote_replace($this->right_delimiter) . "';") , $source_content);
ちなみにこの不具合は、freoではなく、あくまでも『smarty』に問題アリというものです。
また、php.iniの『display_errors』を『On』にしていたから分かりましたが、そうでなければ、エラーに気付くことはなかったでしょう。
freo&smarty | |
2019.07.06 07:01 | |
2019.07.12 07:05 |