Nucleus(JP)フォーラム

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

ログインしていません。

#1 2017-01-16 21:35:00

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

PHP7.1の仕様変更によるプラグインエラーで落ちないようにする方法

PHP7.1から「関数に渡す引数が少ない場合:Error 例外が発生するようになりました 」

不適切なプラグインのために実行が停止してコンテンツが途中で落ちてしまうので
以下で回避できます。 (問題の部分を発見するための応急処置コードです。)

管理者がログイン中のみエラーを管理操作履歴に記録します。

※エラーで停止するか続行するかは管理者によって運営方法が違うと思いますので、
エラー再投入でphpの仕様通りに落とすには、
if (get_class($e) != 'ArgumentCountError')
を削除してください。

コードを切り抜いて貼ったので、もし何か欠けていたりした場合は、自分で補ってください。

ほかにもプラグインがロードされる部分で停止する部分はありますが、同様にすると記録することができます

libs\globalfunctions.php: なるべく上のほう

define('HAS_CATCH_ERROR', version_compare('7.0.0',PHP_VERSION,'<='));

libs\PARSER.php: doAction関数

$this->doAction('plugin('.$action.$this->pdelim.implode($this->pdelim,$params).')');

if (!HAS_CATCH_ERROR) {
	$this->doAction('plugin('.$action.$this->pdelim.implode($this->pdelim,$params).')');
} else {
	try {
		$this->doAction('plugin('.$action.$this->pdelim.implode($this->pdelim,$params).')');
	} catch (Error $e) {
		global $member, $CONF;
		if ($member && $member->isLoggedIn() && $member->isAdmin()) {
			if ($CONF['DebugVars'])
				var_dump($e->getMessage());
			ACTIONLOG::addUnique(ERROR, $e->getMessage());
			if (get_class($e) != 'ArgumentCountError')
				throw $e;
		} else {
			if (get_class($e) != 'ArgumentCountError')
				throw $e;
		}
	}
}

オフライン

Board footer