今回は非公開テストサーバーの更新。
一台のサーバーでのPHP7.4→8.0 へのバージョンアップが終わったので、別のWordPressサーバーも PHP8.0に上げておくことにし、作業を開始したところ、またまたトラブル。
ほぼ同じ設定のサーバーなのに、WordPressトップページをアクセスしたところ、
Fatal error: Uncaught Error: Call to undefined function filter_input() in 以下省略
が発生。
トラブル箇所が filter_input() と出ているので、おそらく filter という名称のモジュールが入っていなくてエラーになっている可能性があります。
pkg search filter
で、確認してみると、
php80-filter-8.0.17_2 The filter shared extension for php
というパッケージが見つかりました。名前が近いのでこれをインストールしてみたところ、不完全ながらWordPress レイアウトのページが表示されるようになりました。
先ほど更新したサーバーには、この php80-filter パッケージは入っていないんですけどねぇ。不思議。
残りの問題メッセージは、以下。
Warning: The magic method Automattic\WooCommerce\Admin\FeaturePlugin::__wakeup() must have public visibility in 以下省略
テストサーバーなので、DNSに名前が無いためなのかもしれませんが、PHP更新前は問題なかったはずなんですが。メッセージの内容から、WooCommerce がエラーを出しているような感じなので、一旦、WooCommerceを削除してみようと、WordPressダッシュボードにログインしようとして、同じエラーでログインさえできないことが判明。(これはやばい!)
こっちのWarningメッセージを検索してみたところ、対象ファイルの指定行の記述を private から public に編集すれば解決すると、wordpress.org のサポート掲示板に書いてありました。
プラグインのソースコードを編集するの???公開サーバーなら絶対にやらないところですが、テストサーバーだし、ダッシュボードにさえログインできないと先に進めないし、ただの編集ですから元に戻すこともできるので、この方法を試してみたところ、、、、見事解決!
ダッシュボードにログインできたので、先ほど更新したサーバーと挙動が異なる理由もわかりました。
テストサーバーのため、しばらくWordPressを更新しておらず、公開サーバーは ver. 5.9.x なのに対し、テストサーバー では、ver. 5.6 が動いていたためのようです。要するに、PHPとWordPressのバージョンがかなり離れていたため。
また、SuperCacheを使っていたため、ソースコードが大幅に異なる古いキャッシュの内容を使っていたようです。
これらの要因で、数時間前にPHP8.0への更新を行ったサーバーと挙動が大きく異なったと推測しました。
そして、上記の手動で編集したWooCommerceプラグインのソースファイルは、WordPressプラグインの更新で、一瞬にして消滅しました。
前の PHP7.4→PHP8.0の更新手順に関しては特に問題なさそうです。