Nucleus(JP)フォーラム

NucleusCMS日本語版ユーザーのためのサポートフォーラムです。疑問が生じたらまずは記事検索をご利用ください。

ログインしていません。

#1 2017-05-06 23:28:13

ピヨピヨbird
メンバー
登録日: 2015-04-05
投稿: 78

使用中のプラグインがPHP7に対応しているか調べる方法を考えるページ


・token_get_all関数を使うなどして、プラグインの互換性の問題をある程度見つけることができるような独立スクリプトを作る

・外部実行機能を利用して、php -l オプションで 再帰的にファイルの文法チェックをし
  その結果を preg_matchして 致命的な文法エラーをひろう。
  ただし、PHP7のパスがわかっている必要がある。

・個々のプラグインフォルダにxmlでフラグを保存する共通仕様などを作って
  PHPのこのバージョンに対応しています宣言をしてもらう。(現状では、非現実的)

・PHP7 ぶつけ本番 (^ ^;
  ダメなプラグインは、名称変更して一時的に強制除外する。

・PHP7は使わずに、PHP5を使い続ける
  サーバーによっては、サーバー管理画面の「PHP切り替え機能」により、php5が選択できる

・PHP の try 文で対応する

編集者 ピヨピヨbird (2017-05-08 20:57:11)

オフライン

#2 2017-05-07 10:56:13

ピヨピヨbird
メンバー
登録日: 2015-04-05
投稿: 78

Re: 使用中のプラグインがPHP7に対応しているか調べる方法を考えるページ

プラグインの先頭に致命的な文法エラーを挿入して、
PHP7で実行しても 管理画面は 続行できるので
このコードを応用すると簡単に検知できます。
古いPHPは、Error文があるとエラーで落ちるので
PHPを判定して切り替え処理が必要になります

テストコード
(1) nucleus/plugins/NP_SkinFiles/NP_SkinFiles.php に致命的な文法エラーを挿入します

<?php
致命的だよ

nucleus/libs/MANAGER.php
(2) _loadPluginを_loadPluginRawに名称変更

もともとある_loadPluginを_loadPluginRawに名称変更します

(3) 下記の関数を追加します

    function _loadPlugin($NP_Name)
    {
        $success = false;
        try
        {
            $this->_loadPluginRaw($NP_Name);
            $success = class_exists($NP_Name);
        }
        catch (Error $e)
        {
        //echo $e->getTraceAsString();
        }
       return $success;
    }

編集者 ピヨピヨbird (2017-05-07 11:12:35)

オフライン

Board footer