EnableOembedプラグインのpreg_match()関数エラーについて

【環境情報】
・baserCMSのバージョン:4.3.7.1
・レンタルサーバー名:ロリポップ PHP7.3
・使用テーマ:Omotenashi2
・PHPスキル(自己評価):E

EnableOembedプラグイン(0.4.1)にて、デバッグモードで確認したところ、以下のエラーメッセージが出ています。

Warning (2): preg_match(): Compilation failed: invalid range in character class at offset 30 [ROOT/theme/hoge/Plugin/EnableOembed/Vendor/mpratt/embera/Lib/Embera/Providers/Twitter.php, line 35]
Warning (2): preg_match() [function.preg-match]: Compilation failed: invalid range in character class at offset 21 [ROOT/theme/hoge/Plugin/EnableOembed/Vendor/mpratt/embera/Lib/Embera/Providers/Twitter.php, line 29]

ググってみたところ、PHP7.3系からPCRE(PHPが使用する正規表現ライブラリ)のバージョンが上がったため、といった内容でした。
確認いただけると嬉しいです。

追記:EnableOembedプラグインの対応バージョンは、4.1.1までとのインフォメーションですので、そもそも不具合とは言えないことは認識しております。

このプラグイン、初見でした。


これでしょうかね?
1 Likes

あっと!申し訳ございません!名称が微妙に違っておりました。間違いございません、これです!
morishiさん、初見ですか?!baserマーケットのダウンロードランキング2位のプラグインなんですが。。。w
実は、先ほど、このGitHub経由、参照下の「Embera」のソースを見ていたところです。
本プラグイン内の解析用ソースファイルと「Embera」のソースファイルを見比べたところ、該当する箇所の正規表現が若干違っていたので、書き換えてみようかと思っていたところです。

あら・・・本当ですね!
@tecking
こちら、いかがでしょうか?

1 Likes

GUSSANさん、morishiさん

報告ありがとうございます!
ちょっと原因調べてみますね。

#ダウンロードランキング上位のプラグインになってたとは

2 Likes

よろしくお願いします!

ちなみに、最新の「Embera」のソースから、該当する部分を摘んで書き換えたところ、Warning出なくなりました。
正規表現自体が詳しくないので、本件が正規表現の違いによるものなのか、そもそもの該当部分の指定アドレスが古かったりするのか、よくわかっていないのですが。。。

いずれにしても、制作者のteckingさんのコメントいただいてから、クローズしようと思います。

同梱のライブラリ「Embera」のバージョンが古かったのが原因だったようです。Emberaを最新版(2.0.13)にアップデートして、下記環境で動作確認しました。

  • baserCMS 3.0.16+PHP 5.6.40
  • baserCMS 4.3.7.1+PHP 7.4.10

ひとまずGitHubのリポジトリにpushしたので

  1. baserCMSの管理画面で現行の「EnableOembed」を無効化→削除
  2. https://github.com/tecking/EnableOembed/releases にて1.0.0のZIPファイルをダウンロード
  3. ZIPファイルを展開(「EnableOembed-1.0.0」というフォルダが現れる)
  4. フォルダEnableOembed-1.0.0を「EnableOembed」にリネーム
  5. EnableOembedフォルダを /app/Plugin 内に移動
  6. baserCMSの管理画面で有効化

という手順で試していただけますでしょうか。

1 Likes

teckingさん、早速のご対応ありがとうございます!
ご指摘の手順で、アップデートを実施したところ、管理画面に不具合が発生してしまいました。
ユーザー側の表示には、全く問題ないのですが、管理画面の記事編集(固定ページ、ブログ記事共)画面で、概要欄、および本文欄が、全く表示されなくなってしまいました。

対応策にお心当たりあれば、お教えください。

管理画面は、admin-secondを使用しています。

こちらの環境では管理画面も問題なく表示されますね…

EnableOembedプラグインを無効化するとどうなります?

1 Likes

無効化、削除、いずれの場合も、復旧しなかったです。
なぜですかねえ?

特にエラーも出てませんし、ユーザー側の表示も全く問題ないところを見ると、データベースは、おそらく無事かと。
管理画面の記事編集、それも概要欄、本文欄のみすっぽり消えるというのが、なぜなのか・・・?
この辺りに影響するのは、コアファイルでしょうか?

GUSSANさんの環境にいくらか寄せてみて確認したのですが、やはり再現しませんでした…:sweat_drops:

  • PHP…7.3.13
  • フロント側テーマ…Omotenashi2
  • 管理画面テーマ…admin-second

確実なことは申し上げられないのですが、ほかに考えられる原因として

  • デフォルト以外のプラグインとの相性
  • コアファイルのインストールの工程

などがありそうです。

ちなみに当方の検証環境は下記のとおりです。

  • サーバ
    Laragon(Windowsのローカルサーバ環境)
  • baserCMS
    4.3.0から4.3.7.1にアップデート(アップデートの手順はこちら
  • 有効化済みプラグイン
    • デフォルトプラグイン(Blog, Mail, Feed, Uploader)
    • EnableOembed
  • テーマ
    baserCMSサンプルテーマ(bc_sample)

ところで改めてGUSSANさんの最初の質問を見ていて気づいたのですが

Warning (2): preg_match(): Compilation failed: invalid range in character class at offset 30 [ROOT/theme/hoge/Plugin/EnableOembed/Vendor/mpratt/embera/Lib/Embera/Providers/Twitter.php, line 35]

プラグインファイルがテーマディレクトリの中にあるということではないですよね…?

1 Likes

いろいろとお手数をかけてしまい大変申し訳ありません。
はい、確かに当初テーマディレクトリにありました。そこが問題でしょうか?
旧バージョンを削除し、アップデート版は、間違いなく、appフォルダ内にアップいたしました。

それであれば問題はなさそうですね。

参考になるかどうかわからないのですが、

  • /js/admin/vendors/ckeditor/ckeditor.js
  • /lib/Baser/webroot/js/admin/vendors/ckeditor/ckeditor.js

上記2つがともに無いとき、GUSSANさんがスクショで投稿してくださったような画面になることを確認しました。コアファイルに起因する問題でしょうかねえ…

1 Likes

いろいろ調べていただきありがとうございます。
ご指摘いただいたckeditor.jsは、両方とも存在していました。
対処方法が不明のため、別ディレクトリに再セットアップし、取り急ぎデータを移行して復旧いたしました。
時間のある時に、原因究明してみたいと思います。

ともあれ現状復帰してよかったです :grinning:
今回の質問、プラグインメンテナンスのきっかけとなりました。ありがとうございました!

1 Likes

こちらこそ、お忙しいところ、検証にご協力くださり、ありがとうございました!
その後、可能な限り環境(プラグイン等)を合わせて、再現性を検証しましたが、結論として同様の現象は再現しませんでした。
ひとつ、今回の現象が起きたときに気になったのが、記事編集画面内の本文欄、概要欄(共にCKEditorが表示されていた箇所)の非表示現象と合わせて、管理画面内のaタグ等のfont colorなどをカスタマイズしていたCSS(初期インストール時にルートに生成される静的なCSSフォルダ内のadminフォルダ内CSSをカスタマイズしていた)が一挙にリセットされる様な現象が起きました。
つまり、それらが書き換えられたか、別の領域のCSSを参照するように定義されたかのような挙動でした。
たとえば、管理画面テーマをsdmin-secondからadmin-thirdに切り替えると、JSフォルダやCSSフォルダ内のadmin-secondが使用していたadminフォルダが削除されますよね。その様な現象かと最初思ったのですが、実際、今回のプラグインインストール時にそれらが削除されたような実態はなく、にもかかわらず、先にお話しした様な挙動が起きました。
結局、なぜそうなったのかは、わからずですが。