2段階認証のプラグイン「Two-Factor-Authentication」を有効化すると下記のような警告が発生しました。
==========================================================
Deprecated: Function mcrypt_get_iv_size() is deprecated in /usr/local/shigi/shigizemi/wp/wp-content/plugins/two-factor-authentication/includes/class-simba-tfa.php on line 510
Deprecated: Function mcrypt_create_iv() is deprecated in /usr/local/shigi/shigizemi/wp/wp-content/plugins/two-factor-authentication/includes/class-simba-tfa.php on line 519
Deprecated: Function mcrypt_decrypt() is deprecated in /usr/local/shigi/shigizemi/wp/wp-content/plugins/two-factor-authentication/includes/class-simba-tfa.php on line 539
===========================================================
「Deprecated: Function mcrypt_decrypt() is deprecated」でGoogle先生にお尋ねしました。
すると、「mcrypt_xxxxx」は、php7.1で非推奨、php7.2から廃止になったということです。
サーバにイントールされているphpのバージョンは7.2です。
しょうがないので、対策です。「mcrypt_xxxx」の代わりに「openssl」を使うことが可能なようです。
幸い、サーバにはopensslがインストールしてあるので、問題の「class-simba-tfa.php」のスクリプトだけを変更することにしました。
では、さっそく回避策を初めます。
【前提条件】
- WordPressのサーバには、すでにopensslがインストールされている。
- サーバにphp7.2がインストールされている。
- php7.1まで、対策されているので、しばらく待っていれば、7.2対策済みにUpdateされるはず。
<手順>
- class-simba-tfa.php の該当行を改修する。
1.class-simba-tfa.php の該当行を改修する。
(1) line 510 (510行目)を改修。
スクリプトをよく眺めてみると、510行目でphp7.1までは、対策がしてあるようです。
php7.2以上なら「elseif」へ飛ぶようにすれば、opensslが使えそうですね。
「phpversion() 」で、現在のphpのバージョン番号を取得できます。
509行目の分岐条件に、「phpversion() < ‘7.2.0’」を追記して、「phpのバージョンが、7.2.0より小さくて、かつ、mcrypt_get_iv_size が存在すれば、真」として、今までどおりすぐ下の return $this->is_php_71 ? の行を実行します。
そうでなければ(php7.2以上ならば)elseifの行へ行き、opensslがインストールされていればそれを利用します。
下記(511行目)のように改修しました。
この改修により、519行目に表示されていたエラーも消えたので、519行目はとくに対策をしていません。そのままにしています。なお519行目は、改修後には行送りされて521行目(マークされた行)になっています。
(2) line 539 (539行目)を改修。
次は、539行目です。2行送られているので、実際は541行目となります。上記と同様に542行目に回避策を施しました。
一応、これで、エラー表示は消えました。
おそらく、もうしばらく待てばphp7.2対策が施されたものがUpdateされるはずです。それを待ってもよいかも。