リソースを更新するとエラーが出ます

質問全般・改善要望
funkydrum
メンバー
メンバー
記事: 2
登録日時: 2018年7月22日(日) 03:06

リソースを更新するとエラーが出ます

投稿記事by funkydrum » 2018年7月22日(日) 03:27

お世話様です。
MODXを1.0.20Jにアップデートし、さぁ更新しようと思ってリソースを編集・更新しようとすると書きエラーが出ます。

Error : preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead

ErrorType[num] : WARNING[2]
File : /oooooo/assets/plugins/transalias/transalias.class.php
Line : 151
Source : $alias = preg_replace('/&#x([0-9a-f]{1,7});/ei', 'chr(hexdec("\\1"))', $alias);
LastQuery : SELECT uga.documentgroup as documentgroup FROM `database_name`.`modx_member_groups` ug INNER JOIN `database_name`.`modx_membergroup_access` uga ON uga.membergroup=ug.user_group WHERE ug.member='1'

preg_replaceをpreg_replace_callbackに変えなさいという内容までは分かり、変えてやってみましたが今度は「そうではない!」と怒られてしまいました。

何か解決方法はありますでしょうか?

ちなみにMODXは下記よりダウンロード、アップデートしています。
https://github.com/modxcms-jp/evolution ... master.zip

よろしくお願い致します。
mod_kks
メンバー
メンバー
記事: 22
登録日時: 2017年11月04日(土) 01:31

リソースを更新するとエラーが出ます

投稿記事by mod_kks » 2018年7月23日(月) 00:30

現行のEvolution CMSのリソースから一部拝借してくるというのはいかがでしょうか。
具体的には「transalias.class.php」に以下の2メソッドを「convert_entity」メソッドの下あたりに加え、

コード: 全て選択

    /**
     * Convert hexadecimal entities to their actual character.
     *
     * @param array $matches matches array from preg_replace_callback
     * @return string converted entity
     */
    function convert_hex_entity($matches)
    {
        return chr(hexdec($matches[1]));
    }

    /**
     * Convert numeric entities to their actual character.
     *
     * @param array $matches matches array from preg_replace_callback
     * @return string converted entity
     */
    function convert_numeric_entity($matches) {
        return chr($matches[1]);
    }


実際に加工されたと思われる以下の2行を

コード: 全て選択

        // Convert all numeric entities to their actual character
        $alias = preg_replace('/&#x([0-9a-f]{1,7});/ei', 'chr(hexdec("\\1"))', $alias);
        $alias = preg_replace('/&#([0-9]{1,7});/e', 'chr("\\1")', $alias);


以下のように書き換えます。

コード: 全て選択

        // Convert all numeric entities to their actual character
        $alias = preg_replace_callback('/&#x([0-9a-f]{1,7});/i', array($this, 'convert_hex_entity'), $alias);
        $alias = preg_replace_callback('/&#([0-9]{1,7});/', array($this, 'convert_numeric_entity'), $alias);


このプラグイン自体、使ったことがないのでよくわからないのですが、パターン修飾子「e」はPHP7で削除になったので、実際にPHP7.1.xの環境で試すと同じにエラーが出ていました。上記のように修正してみたところ、とりあえずは正常に動作しているようです。
funkydrum
メンバー
メンバー
記事: 2
登録日時: 2018年7月22日(日) 03:06

リソースを更新するとエラーが出ます

投稿記事by funkydrum » 2018年7月24日(火) 01:03

mod_kks さま

お世話になります。

何と言ったら良いのでしょうか。
素晴らしすぎます!

一発で解決出来ました!

PHPも7.1.15となっていましたので、mod_kks さまのご指摘の通りに改変しましたら問題なく動作しております。

本当にありがとうございました!