話題の人物YouTubeまとめ&雑記雑感雑多ログ

PHP5.6.18にアップデートすると、freo(smarty)で『preg_replace();・・・』エラー

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設置ディレクトリをルートURLで表示 2018.05.01

雑記雑感雑多ログ

タイ・シルバーの新芽2本目を確認 2018.05.12 画像遅延スクリプト「echo.js」でページ表示の体感速度を上げる。 2018.05.11 格闘技イベント「RIZIN」での衝撃KOシーン!堀口恭司vsイアン・マッコール 2018.05.09 広告収入で賄う無料タクシー「nommoc/ノモック」とは!? 2018.05.08 これって…そのためのTシャツ!?ポケットティッシュをスマートに出せるアイデアTシャツ 2018.05.07 ゴールデンウィーク明けの仮想通貨動向 2018.05.07 プロレスの登場シーンをかっこ良く決めるつもりが、張り切り過ぎてしまった結果・・・ズッコケ名シーン。 2018.05.05 新サイト「CCindex/仮想通貨・暗号通貨まとめ」リリース! 2018.05.04 指定ディレクトリ(フォルダ)内の画像ファイルを抽出してランダム(重複なし)に表示させる最短コード 2018.05.01 最低覚えておきたいチャートの見方 2018.05.01